helm 离线部署(K8S工具分享-IBM出品的Helm入门系列之部署应用)
helm 离线部署(K8S工具分享-IBM出品的Helm入门系列之部署应用)要查看远程主机上的留言簿,请在$ kubectl get services输出的EXTERNAL-IP和PORTS列中找到负载均衡器的外部IP和端口。2、查看guestbook:现在,我们可以通过在浏览器中打开刚创建的留言簿来玩(可能需要一些时间才能显示出来)。克隆Guestbook App存储库以获取文件:Git clone https://github.com/IBM/guestbook.git1、使用克隆的Git库中的配置文件来部署容器,并使用以下命令为它们创建服务:$ cd guestbook/v1 $ kubectl create -f redis-master-deployment.YAML deployment.apps/redis-master created $ kubectl create -f redis-master-service.yaml service/r
Lab1 使用Helm部署应用让我们研究一下Helm如何使用Chart来简化部署。我们首先使用kubectl将应用程序部署到Kubernetes集群,然后展示如何通过使用Helm部署同一应用程序。
该应用程序是Guestbook App,它是一个多层级的Web应用程序。
场景1: 使用kubectl部署应用在本部分的实验中,我们将使用Kubernetes客户端kubectl部署应用程序。使用该应用程序的版本1进行部署。
如果已经从kube101安装了guestbook应用程序,请跳过本节,转到场景2中的helm示例。
克隆Guestbook App存储库以获取文件:
Git clone https://github.com/IBM/guestbook.git
1、使用克隆的Git库中的配置文件来部署容器,并使用以下命令为它们创建服务:
$ cd guestbook/v1
$ kubectl create -f redis-master-deployment.YAML
deployment.apps/redis-master created
$ kubectl create -f redis-master-service.yaml
service/redis-master created
$ kubectl create -f redis-slave-deployment.yaml
deployment.apps/redis-slave created
$ kubectl create -f redis-slave-service.yaml
service/redis-slave created
$ kubectl create -f guestbook-deployment.yaml
deployment.apps/guestbook-v1 created
$ kubectl create -f guestbook-service.yaml
service/guestbook created
有关更多详细信息,请参阅README。
2、查看guestbook:现在,我们可以通过在浏览器中打开刚创建的留言簿来玩(可能需要一些时间才能显示出来)。
- 本地主机:如果我们在本地运行Kubernetes,请在浏览器中导航至http://localhost:3000以查看留言簿。
- 远程主机:
要查看远程主机上的留言簿,请在$ kubectl get services输出的EXTERNAL-IP和PORTS列中找到负载均衡器的外部IP和端口。
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
guestbook LoadBalancer 172.21.252.107 50.23.5.136 3000:31367/TCP
redis-master ClusterIP 172.21.97.222 <none> 6379/TCP
redis-slave ClusterIP 172.21.43.70 <none> 6379/TCP
.........
在这种情况下,URL为http://50.23.5.136:31367。
注意:如果未分配外部IP,则可以使用以下命令获取外部IP:
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
10.47.122.98 Ready <none> 1h v1.10.11 IKS 173.193.92.112 Ubuntu 16.04.5 LTS 4.4.0-141-generic docker://18.6.1
在这种情况下,URL为http://173.193.92.112:31367。WW在浏览器中导航到给定的输出(例如http://50.23.5.136:31367)。应该看到浏览器显示如下:
在实验的这一部分,我们将使用Helm部署应用程序。我们将设置guestbook-demo的发行版名称,以使其与之前的部署区分开。可在此处获得Helm chart。克隆Helm 101存储库以获取文件:
git clone https://github.com/IBM/helm101
Chart被定义为描述一组相关的Kubernetes资源的文件的集合。我们先查看文件,然后再安装。guestbook 的chart文件如下:
.
├──Chart.yaml \\包含有关信息的YAML文件
├──LICENSE \\许可证
├──README.md \\帮助文档,提供有关chart用法,配置,安装等信息
├──template \\模板目录,当与values.yaml结合使用时将生成有效的Kubernetes清单文件
│ ├──_helpers.tpl \\在整个chart中重复使用的模板帮助程序/定义
│ ├──guestbook-deployment.yaml \\ Guestbook应用程序容器资源
│ ├──guestbook-service.yaml \\ Guestbook应用服务资源
│ ├──NOTES.txt \\一个纯文本文件,包含有关如何在安装后访问应用程序的简短使用说明
│ ├──redis-master-deployment.yaml \\ Redis主容器资源
│ ├──redis-master-service.yaml \\ Redis主服务资源
│ ├──redis-slave-deployment.yaml \\ Redis从属容器资源
│ └──redis-slave-service.yaml \\ Redis从属服务资源
└──values.yaml \\chart的默认配置值
注意:上面显示的模板文件将被传递到Kubernetes清单文件中,然后再传递给Kubernetes API服务器。因此,它们映射到我们在使用kubectl时部署的清单文件(不包含README和NOTES)。
让我们继续并立即安装chart。如果helm-demo命名空间不存在,则需要使用以下命令创建它:
kubectl create namespace helm-demo
- 将应用程序作为Helm chart安装:
$ cd helm101/charts
$ helm install guestbook-demo ./guestbook/ --namespace helm-demo
NAME: guestbook-demo
...
我们应该看到类似于以下内容的输出:
NAME: guestbook-demo
LAST DEPLOYED: Mon Feb 24 18:08:02 2020
NAMESPACE: helm-demo
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get svc -w guestbook-demo --namespace helm-demo'
export SERVICE_IP=$(kubectl get svc --namespace helm-demo guestbook-demo -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo http://$SERVICE_IP:3000
该chart的安装将执行Redis主服务器和从服务器以及guestbook应用的Kubernetes部署和服务创建。这是因为该chart是描述一组相关的Kubernetes资源的文件的集合,并且Helm通过Kubernetes API管理这些资源的创建。
查看部署状态:
$ kubectl get deployment guestbook-demo --namespace helm-dem
NAME READY UP-TO-DATE AVAILABLE AGE
guestbook-demo 2/2 2 2 51m
查看pod状态:
$ kubectl get pods --namespace helm-demo
NAME READY STATUS RESTARTS AGE
guestbook-demo-6c9cf8b9-jwbs9 1/1 Running 0 52m
guestbook-demo-6c9cf8b9-qk4fb 1/1 Running 0 52m
redis-master-5d8b66464f-j72jf 1/1 Running 0 52m
redis-slave-586b4c847c-2xt99 1/1 Running 0 52m
redis-slave-586b4c847c-q7rq5 1/1 Running 0 52m
查看service状态:
$ kubectl get services --namespace helm-demo
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
guestbook-demo LoadBalancer 172.21.43.244 <pending> 3000:31367/TCP 52m
redis-master ClusterIP 172.21.12.43 <none> 6379/TCP 52m
redis-slave ClusterIP 172.21.176.148 <none> 6379/TCP 52m
查看留言簿:
现在,我们可以通过在浏览器中打开刚创建的留言簿来玩(可能需要一些时间才能显示出来)。
- 本地主机:如果我们在本地运行Kubernetes,请在浏览器中导航至http://localhost:3000以查看留言簿。
- 远程主机:
要查看远程主机上的留言簿,请在$ kubectl get services输出的EXTERNAL-IP和PORTS列中找到负载均衡器的外部IP和端口。
$ export SERVICE_IP=$(kubectl get svc --namespace helm-demo guestbook-demo -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ echo http://$SERVICE_IP
http://50.23.5.136
在这种情况下,URL为http://50.23.5.136:31367。
注意:如果未分配外部IP,则可以使用以下命令获取外部IP:
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE
10.47.122.98 Ready <none> 1h v1.10.11 IKS 173.193.92.112 Ubuntu 16.04.5 LTS
在这种情况下,URL为http://173.193.92.112:31367。在浏览器中导航到给定的输出(例如http://50.23.5.136:31367)。应该看到浏览器显示如下:
恭喜,我们现在已经通过两种不同的方法将应用程序部署到Kubernetes。从本实验中,我们可以看到,与使用kubectl相比,使用Helm所需的命令更少,思考的时间也更少(通过提供chart路径而不是单个文件)。 Helm的应用程序管理为用户提供了这种简单性。