VPC服务中的Kubernetes集群



我们增加了在早期Beta测试模式下在虚拟私有云服务中方便地启动Kubernetes的功能。


对于需要方便管理作为容器运行的大量应用程序的用户而言,此功能将非常有用。 Kubernetes提供了用于在集群内运行的容器进行扩展,自我修复,负载平衡的工具。


由于虚拟私有云服务基于OpenStack,因此我们使用其组件之一-OpenStack Magnum 。 它允许您快速创建具有所需节点数的私有Kubernetes集群。


当前,我们服务的任何用户都可以在他们的项目中创建几个独立的集群。 作为群集节点,将使用虚拟机,可以选择和更改其配置。


在本文中,我们将讨论Kubernetes集群的主要对象,并使用示例查看使用OpenStack Magnum创建集群的过程。


创建和管理Kubernetes集群


当前,只能通过控制台实用程序或可用性区域ru-1aru-1b (圣彼得堡)中的OpenStack API创建Kubernetes集群。


首先,您需要:


  • 创建一个新的或使用现有的VPC项目;
  • 使用SSH密钥创建用户 ;
  • 在项目管理页面上将用户添加到创建的项目中;
  • 转到项目并在“ 访问”选项卡上获取访问文件;
  • 使用python-magnumclient库安装openstack控制台客户端;
  • 安装kubectl控制台客户端。

要安装openstack控制台客户端, 可以使用链接上的说明,但是,请记住,对于此客户端,您还需要安装python-magnumclient库以支持创建Kubernetes集群。


用于安装带有Ubuntu / Debian系列操作系统所需插件的openstack客户端的全套命令:


$ sudo apt update $ sudo apt -y install curl python-pip python-dev python3-dev git libxml2-dev libxslt1-dev python-openssl python3-openssl python-pyasn1 libffi-dev libssl-dev build-essential $ sudo pip install -UI pbr setuptools pytz $ sudo pip install -UI git+https://github.com/openstack/python-openstackclient $ sudo pip install -UI git+https://github.com/openstack/python-magnumclient 

安装带有Fedora / CentOS系列操作系统所需插件的openstack客户端的全套命令:


 $ sudo yum -y install python-pip gcc libffi-devel python-devel libxslt-devel openssl-devel git libffi-devel $ sudo pip install -UI pbr setuptools pytz $ sudo pip install -UI git+https://github.com/openstack/python-openstackclient $ sudo pip install -UI git+https://github.com/openstack/python-magnumclient 

要管理Kubernetes对象,您需要kubectl控制台客户端。 官方文档中介绍了各种操作系统的安装方法。


要创建集群,您将需要创建或使用现有集群:


  • 集群模板 ;
  • 虚拟机的CPU和RAM的一组参数( flavor )。

您可以创建集群模板并自己调味,也可以使用公共的预先创建的模板。


您还需要确定可用区,群集的磁盘类型以及节点数。 值得考虑的是,我们尚不支持在多个区域中创建一个集群的可能性。 您可以选择任何类型的网络驱动器(快速,通用或基本)。
您可以从我们的知识库中了解有关驱动器类型的更多信息。


对于角色和从属角色,节点的数量可以不同。 在执行主角色的节点上,将启动集群控制元素-controller -managerschedulerapi 。 在其他节点上,将启动kubeletkube-proxy服务和所有应用程序容器。 您可以从官方文档中了解有关在群集节点上运行的组件的更多信息。


要通过SSH访问节点,您将需要使用之前创建的SSH密钥。 示例命令将使用一个名为ssh-test的键。


我们将使用公共群集模板和样式,快速磁盘类型以及ru-1b可用区。
在我们的集群中,最初将启动2个主节点和3个仆从节点。


为了验证这些参数,我们使用openstackclient命令和下载的访问文件( rc.sh ):


 #          . $ source rc.sh #  ,         $ openstack flavor show BL1.2-4096 -c ram -c vcpus +-------+-------+ | Field | Value | +-------+-------+ | ram | 4096 | | vcpus | 2 | +-------+-------+ #       ru-1b $ openstack volume type show fast.ru-1b -c name +-------+------------+ | Field | Value | +-------+------------+ | name | fast.ru-1b | +-------+------------+ #    Kubernetes $ openstack coe cluster template list -c name +---------------------------------------+ | name | +---------------------------------------+ | kubernetes-nofloatingips-ru-1b-v1.9.3 | | kubernetes-nofloatingips-ru-1b-v1.9.6 | | kubernetes-nofloatingips-ru-1b-v1.9.9 | | kubernetes-floatingips-ru-1b-v1.9.3 | | kubernetes-floatingips-ru-1b-v1.9.6 | | kubernetes-floatingips-ru-1b-v1.9.9 | | kubernetes-nofloatingips-ru-1a-v1.9.3 | | kubernetes-nofloatingips-ru-1a-v1.9.6 | | kubernetes-nofloatingips-ru-1a-v1.9.9 | | kubernetes-floatingips-ru-1a-v1.9.3 | | kubernetes-floatingips-ru-1a-v1.9.6 | | kubernetes-floatingips-ru-1a-v1.9.9 | +---------------------------------------+ 

例如,我们将选择第二个群集模板;每个节点的可公开访问的浮动地址都不会由此创建。 我们将不需要它们。


 #   Kubernetes   test-cluster #   keypair   ,   $ openstack coe cluster create \ --cluster-template kubernetes-nofloatingips-ru-1b-v1.9.9 \ --master-count 2 \ --node-count 3 \ --keypair ssh-test \ --master-flavor BL1.2-4096 \ --flavor BL1.2-4096 \ test-cluster 

请注意,我们为不同的节点选择了相同的配置(主味和风味参数),您可以根据集群的要求选择不同的配置集。 创建后可以进行更改。


还值得考虑的是,当创建具有多个主节点的集群时,将自动创建一个负载均衡器来访问Kubernetes API。


几分钟后,一个Kubernetes集群将出现在您的项目中。 在项目控制面板中,您将看到新的虚拟机,磁盘和网络对象。


您可以通过openstackclient检查集群的状态:


 openstack coe cluster list -c name -c status +--------------+--------------------+ | name | status | +--------------+--------------------+ | test-cluster | CREATE_IN_PROGRESS | +--------------+--------------------+ 

集群进入CREATE_COMPLETE状态后,您可以使用以下命令下载配置文件,通过kubectl实用程序管理其对象:


 $ mkdir -p ~/test-cluster $ openstack coe cluster config test-cluster --dir ~/test-cluster 

之后,您可以使用kubectl实用程序使用集群:


 $ export KUBECONFIG=~/test-cluster/config $ kubectl get pods --all-namespaces -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase NAME STATUS coredns-785dcf9c58-6gnfp Running heapster-6846cdc674-rm4k6 Running kube-dns-autoscaler-6b94f7bbf8-x5clt Running kubernetes-dashboard-747575c864-wlg6p Running monitoring-grafana-84b4596dd7-zf5rx Running monitoring-influxdb-c8486fc95-bqqb6 Running node-exporter-test-cluster-robvp4cvwpt7-minion-0 Running 

如有必要,您可以通过传递新的node_count值,通过openstackclient增加或减少集群中的奴才节点的数量:


 $ openstack coe cluster update test-cluster replace node_count=4 

关键的Kubernetes集群对象


豆荚


尽管Kubernetes管理一组容器,但是Kubernetes管理的底层实体不是容器,而是Pod


Pod是一组Linux内核名称空间和网络堆栈设置,可让您将一组容器组装成一个实体。
通常,一个包含应用程序的容器会在一个单独的Pod中启动。
如有必要,您可以在一个Pod内运行多个容器,当您需要通过本地主机网络接口提供从一个容器到另一个容器的访问,或者出于某些其他原因在同一主机上运行多个容器时,这很有用。
在同一Pod中运行的所有容器都将具有一个主机名,IP地址,路由表和磁盘。


值得注意的是,当在Kubernetes中扩展应用程序实例的数量时,有必要增加Pods的数量,而不是增加一个特定Pod中容器的数量。
有关更多详细信息,请参见Pods官方文档。


例如,让我们使用yaml格式的描述使用Nginx创建最简单的Pod:


 # nginx-basic.yaml apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: library/nginx:1.14-alpine ports: - containerPort: 80 

要创建Pod,我们可以使用kubectl实用程序。
我们将本文中介绍的所有示例添加到我们的Github组中 ,因此您不能在计算机上创建文件,但可以使用公共存储库中的文件url:


 $ kubectl create \ -f https://raw.githubusercontent.com/selectel/kubernetes-examples/master/pods/nginx-basic.yaml 

创建后,我们可以使用kubectl describe命令请求有关Pod状态的完整信息:


 $ kubectl describe pod nginx Name: nginx Namespace: default Node: test-cluster-nd5c5y6lsfxb-minion-0/10.0.0.5 Start Time: Sun, 17 Jun 2018 12:29:03 +0000 Labels: <none> Annotations: <none> Status: Running IP: 10.100.88.9 Containers: nginx: Container ID: docker://6ca6383b66686c05c61c1f690737110e0f8994eda393f44a7ebfbbf2b2026267 Image: library/nginx:1.14-alpine Image ID: docker-pullable://docker.io/nginx@sha256:944b79ca7dbe456ce72e73e70816c1990e39967c8f010349a388c00b77ec519c Port: 80/TCP Host Port: 0/TCP State: Running Started: Sun, 17 Jun 2018 12:29:16 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-rp5ls (ro) Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: default-token-rp5ls: Type: Secret (a volume populated by a Secret) SecretName: default-token-rp5ls Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 52s default-scheduler Successfully assigned nginx to test-cluster-nd5c5y6lsfxb-minion-0 Normal SuccessfulMountVolume 51s kubelet, test-cluster-nd5c5y6lsfxb-minion-0 MountVolume.SetUp succeeded for volume "default-token-rp5ls" Normal Pulling 50s kubelet, test-cluster-nd5c5y6lsfxb-minion-0 pulling image "library/nginx:1.14-alpine" Normal Pulled 39s kubelet, test-cluster-nd5c5y6lsfxb-minion-0 Successfully pulled image "library/nginx:1.14-alpine" Normal Created 39s kubelet, test-cluster-nd5c5y6lsfxb-minion-0 Created container Normal Started 39s kubelet, test-cluster-nd5c5y6lsfxb-minion-0 Started container 

如您所见,Pod在名为test-cluster-nd5c5y6lsfxb-minion-0的节点上启动,并获得内部IP地址10.100.88.9。


在“事件”部分中,您可以看到主要的启动事件-选择要启动的节点并下载映像。


我们可以进入Pod并检查容器内进程的状态:


 $ kubectl exec -it nginx sh ps aux PID USER TIME COMMAND 1 root 0:00 nginx: master process nginx -g daemon off; 7 nginx 0:00 nginx: worker process 20 root 0:00 sh 24 root 0:00 ps aux exit 

应当记住,IP地址10.100.88.9对于Kubernetes集群内部和外部的其他应用程序将不可用,只能从Pod本身内部访问正在运行的Nginx:


 $ ping -c 1 10.100.88.9 PING 10.100.88.9 (10.100.88.9): 56 data bytes --- 10.100.88.9 ping statistics --- 1 packets transmitted, 0 packets received, 100% packet loss $ kubectl exec nginx -- ping -c1 10.100.88.9 PING 10.100.88.9 (10.100.88.9): 56 data bytes 64 bytes from 10.100.88.9: seq=0 ttl=64 time=0.075 ms --- 10.100.88.9 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.075/0.075/0.075 ms 

除了只能从容器访问指定的IP地址外,它也不是永久的。 这意味着,如果重新创建此Pod,则可以获取其他IP地址。


要解决这些问题,可以使用一个称为Service的对象。


服务项目


通过服务,您可以为Pod分配永久IP地址,提供它们从外部网络的访问权限以及平衡Pod之间的请求。
您可以在官方文档中了解有关服务的更多信息。


例如,我们需要删除正在运行的Pod:


 $ kubectl delete pod nginx 

在Pod的描述中添加标签(标签),这是服务所必需的:


 # nginx-labeled.yaml apiVersion: v1 kind: Pod metadata: name: nginx labels: app: webservice spec: containers: - name: nginx image: library/nginx:1.14-alpine ports: - containerPort: 80 

我们还将需要对服务的描述:


 # nginx-nodeport.yaml apiVersion: v1 kind: Service metadata: name: nginx-nodeport labels: app: webservice spec: type: NodePort ports: - port: 80 nodePort: 30001 protocol: TCP selector: app: webservice 

创建Pod和服务:


 $ kubectl create \ -f https://raw.githubusercontent.com/selectel/kubernetes-examples/master/pods/nginx-labeled.yaml \ -f https://raw.githubusercontent.com/selectel/kubernetes-examples/master/services/nginx-nodeport.yaml 

由于创建的服务的类型为NodePort,因此我们在所有网络接口上指示的端口30001将在群集的所有节点上打开。
这意味着,如果我们将外部IP地址添加到任何节点,则可以使用Nginx从外部网络访问正在运行的Pod。


为了不使用群集节点的外部地址来访问服务,我们可以使用LoadBalancer类型代替NodePort。
我们将需要对服务进行新的描述:


 # nginx-loadbalancer.yaml apiVersion: v1 kind: Service metadata: name: nginx-loadbalancer labels: app: webservice spec: type: LoadBalancer ports: - port: 80 protocol: TCP selector: app: webservice 

删除当前服务并应用新描述:


 $ kubectl delete service nginx-service $ kubectl create \ -f https://raw.githubusercontent.com/selectel/kubernetes-examples/master/services/nginx-loadbalancer.yaml 

启动该服务后,Nginx将可从外部网络在TCP端口80上使用,并且无需为群集节点分配和使用外部地址。 类型为LoadBalancer的服务将自动为您的VPC项目分配一个新的外部地址并开始使用它。


您可以使用kubectl获取有关突出显示的外部地址的信息:


 $ kubectl get service nginx-service -o=custom-columns=IP:status.loadBalancer.ingress[0].ip IP xxx.xxx.xxx.xxx 

在我们的示例中,只有一个Pod与Nginx一起启动。 为了将应用程序扩展到更多Pod,我们可以使用Deployment。


部署


部署是Kubernetes集群的本质,它使您可以扩展Pod并方便地更新或回滚大量Pod的版本。
除了部署以外,您还可以使用ReplicaSet对象,但是在示例中我们将不涉及它。
您可以在官方文档中了解有关部署的更多信息。


我们将再次需要删除Pod(我们不需要删除服务):


 $ kubectl delete pod nginx 

添加以下部署描述:


 # nginx-1.14.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 10 selector: matchLabels: app: webservice minReadySeconds: 10 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 template: metadata: labels: app: webservice spec: containers: - name: nginx image: library/nginx:1.14-alpine ports: - containerPort: 80 

创建指定的部署:


 $ kubectl create -f \ https://raw.githubusercontent.com/selectel/kubernetes-examples/master/deployments/nginx-1.14.yaml 

我们为副本参数选择了10个,因此将在我们的集群中创建带有Nginx应用程序的10个Pod:


 $ kubectl get pods --selector app=webservice NAME READY STATUS RESTARTS AGE nginx-deployment-54bfdc4489-42rrb 1/1 Running 0 4m nginx-deployment-54bfdc4489-5lvtc 1/1 Running 0 4m nginx-deployment-54bfdc4489-g7rk2 1/1 Running 0 4m nginx-deployment-54bfdc4489-h5rxp 1/1 Running 0 4m nginx-deployment-54bfdc4489-l9l2d 1/1 Running 0 4m nginx-deployment-54bfdc4489-pjpvg 1/1 Running 0 4m nginx-deployment-54bfdc4489-q8dnp 1/1 Running 0 4m nginx-deployment-54bfdc4489-s4wzf 1/1 Running 0 4m nginx-deployment-54bfdc4489-tfxf9 1/1 Running 0 4m nginx-deployment-54bfdc4489-xjzb5 1/1 Running 0 4m 

您可以使用上一部分中创建的服务从外部网络访问正在运行的应用程序。 服务将在10个Nginx实例之间自动平衡来自外部网络的请求。


如有必要,我们可以更新Nginx的版本。 通过将映像的版本从1.14-alpine更改为1.15-alpine,更新部署说明:


 # nginx-1.15.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 10 selector: matchLabels: app: webservice minReadySeconds: 10 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 template: metadata: labels: app: webservice spec: containers: - name: nginx image: library/nginx:1.15-alpine # <-- changed ports: - containerPort: 80 

要开始更新Pod的过程,我们使用kubectl命令。 注意参数--record,它对我们以后方便的Nginx版本回滚很有用:


 $ kubectl apply -f \ https://raw.githubusercontent.com/selectel/kubernetes-examples/master/deployments/nginx-1.15.yaml \ --record 

您可以使用以下命令监视更新进度:


 $ kubectl rollout status deployment nginx-deployment Waiting for rollout to finish: 4 out of 10 new replicas have been updated... 

成功更新一个Pod后,Kubernetes将等待10秒,因为我们在Deployment描述中为minReadySeconds参数指定了10值。


更新完成后,所有要部署的Pod都将进入活动状态:


 $ kubectl get deployment --selector app=webservice NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 10 10 10 10 23m 

如果出现问题,我们可以回滚该应用程序的版本。 为此,我们需要选择所需的Deployment版本:


 $ kubectl rollout history deployment nginx-deployment deployments "nginx-deployment" REVISION CHANGE-CAUSE 1 <none> 2 kubectl apply --filename=https://raw.githubusercontent.com/selectel/kubernetes-examples/master/deployments/nginx-1.15.yaml --record=true 

命令的输出中有2个修订-第一个是Deployment的初始创建,第二个是更新。 由于在更新时使用了--record参数,因此我们看到了创建Deployment的第二个修订版的命令。


要回滚版本,请使用以下命令:


 $ kubectl rollout undo deployment nginx-deployment --to-revision=1 

与更新类似,我们可以使用以下命令监视版本的回滚:


 $ kubectl rollout status deployment nginx-deployment Waiting for rollout to finish: 6 out of 10 new replicas have been updated… 

在所有示例中,我们都使用了没有持久数据存储的容器。 在下一节中,我们将修复它。


资料储存


默认情况下,Pods中运行的容器中的所有数据都是短暂的,当Pods崩溃时,这些数据将丢失。


您可以使用PersistentVolumeClaim对象与持久性数据仓库一起运行Pod。


在集群中创建这样的对象非常简单-只需添加其描述即可,就像我们在上一节中创建Pod,Service或Deployment的方式一样。


可以在官方文档中找到更多信息。


PersistentVolumeClaim创建10GB磁盘的示例说明:


 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pv-claim spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi 

通过使用之前创建的Nginx更新Pod的描述,我们可以将其作为磁盘连接到Pod:


 # nginx-with-volume.yaml apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: library/nginx:1.14-alpine ports: - containerPort: 80 volumeMounts: - mountPath: "/var/www/html" name: data volumes: - name: data persistentVolumeClaim: claimName: my-pv-claim 

但是,为了创建磁盘,您将需要以StorageClass的形式指定所创建磁盘的属性。 在“虚拟私有云”服务中,您可以使用快速,通用和基本类型的网络驱动器作为Kubernetes Pod数据的永久存储。


例如,要创建允许您在ru-1b可用性区域中使用快速磁盘的StorageClass,您需要以下描述:


 # fast.ru-1b.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: fast.ru-1b annotations: storageclass.beta.kubernetes.io/is-default-class: "true" provisioner: kubernetes.io/cinder parameters: type: fast.ru-1b availability: ru-1b 

在创建指定的对象之前,请删除先前创建的Deployment:


 $ kubectl delete deployment nginx-deployment 

首先,让我们创建一个StorageClass,它将成为默认类,稍后创建的PersistentVolumeClaim将使用它:


 $ kubectl create -f \ https://raw.githubusercontent.com/selectel/kubernetes-examples/master/storageclasses/fast.ru-1b.yaml 

创建PersistentVolumeClaim和Pod:


 $ kubectl create \ -f https://raw.githubusercontent.com/selectel/kubernetes-examples/master/persistentvolumeclaims/my-pv-claim.yaml \ -f https://raw.githubusercontent.com/selectel/kubernetes-examples/master/pods/nginx-with-volume.yaml 

之后,将在您的项目中自动创建一个磁盘,该磁盘将连接到集群的一个奴才节点。 跌落时,磁盘将自动切换到另一个节点。


我们可以使用Nginx看到容器内的磁盘:


 $ kubectl exec -it nginx sh mount | grep "/var/www/html" /dev/sdc on /var/www/html type ext4 (rw,seclabel,relatime,data=ordered) exit 

您可以将驱动器连接到Deployment。 相应的示例可以在官方文档中找到。


Kubernetes控制面板


您可以使用Kubernetes本身的内置仪表板来查看集群对象的状态及其管理。


要访问面板的所有功能,您将需要在集群中创建一个具有管理员角色的帐户。


为此,我们需要一个帐户说明:


 # admin-user.yaml apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system 

以及角色描述:


 # cluster-admin.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system 

创建指定的对象:


 $ kubectl create \ -f https://raw.githubusercontent.com/selectel/kubernetes-examples/master/accounts/admin-user.yaml \ -f https://raw.githubusercontent.com/selectel/kubernetes-examples/master/clusterrolebindings/cluster-admin.yaml 

接下来,您将需要找出此帐户生成的令牌的值。
为此,请在集群中找到相应的Secret对象:


 $ kubectl get secret --namespace=kube-system | grep "admin-user-token" admin-user-token-bkfhb kubernetes.io/service-account-token 3 22m 

并查看名称为admin-user-token-bkfhb的找到的Secret的令牌值:


 $ kubectl describe secret admin-user-token-bkfhb --namespace=kube-system | grep "token:" token: XXXXXX... 

作为响应,您将收到令牌的值并将其保存,这将对我们将来有用。
有关Kubernetes对象的访问控制的详细信息,请参见官方文档


如果您是从公共模板创建集群的,则Pod和Service已经存在于其中,以确保面板的操作:


 $ kubectl get svc kubernetes-dashboard --namespace=kube-system 206ms Tue Jun 19 14:35:19 2018 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard ClusterIP 10.254.122.245 <none> 443/TCP 2d $ kubectl get pod --namespace=kube-system --selector k8s-app=kubernetes-dashboard 119ms Tue Jun 19 14:36:48 2018 NAME READY STATUS RESTARTS AGE kubernetes-dashboard-747575c864-jpxvt 1/1 Running 0 2d 

由于服务属于ClusterIP类型,因此只能从群集本身内部使用。
您可以使用kubectl命令从工作计算机上使用集群配置文件访问面板:


 $ kubectl proxy Starting to serve on 127.0.0.1:8001 

通过在浏览器中打开指定的地址来测试代理:



如果您看到与屏幕截图类似的答案,则可以使用以下地址转到控制面板屏幕:


 http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ 

通过它,您应该在面板中看到登录屏幕:



您将需要指定先前收到的令牌。 登录后,可以使用控制面板:



您可以在官方文档中找到控制面板的所有功能。


监控Kubernetes对象


如果使用公共群集模板,则将自动运行用于收集和显示指标的组件-Prometheus和Grafana。


与控制面板类似,将ClusterIP作为服务类型安装;只能从群集内部或通过kubectl代理对其进行访问。 您可以通过以下地址从工作计算机访问Grafana:


 http://127.0.0.1:8001/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana:80 


结论


在本文中,我们研究了最常用的Kubernetes对象,并查看了使用OpenStack Magnum启动和管理集群的示例。


在不久的将来,可以使用最新的Kubernetes版本,并且可以通过控制面板进行集群管理。


如果您在测试模式下使用我们的服务并提供反馈,我们将非常高兴。

Source: https://habr.com/ru/post/zh-CN416951/


All Articles