安装Helm并确认其运行正常
首先
Helm是Kubernetes的软件包管理工具,类似于RH系的yum。通常在Kubernetes中部署某种服务时,会部署Pod,并通过ConfigMap或Secret提供配置信息,同时还会部署用于与集群外通信的Service。使用Helm可以将这些操作一起部署。
我想安装这个Helm并尝试通过Helm来部署软件包。
安装Helm
请按照以下步骤安装:
https://helm.sh/ja/docs/intro/install/
下载和运行安装脚本。
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
Error: could not find tiller
Helm v3.2.4 is available. Changing from version .
Downloading https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
从Helm Ver.3开始,不再需要Tiller,但如果找不到Tiller,会出现错误。
由于安装已经完成,所以可以忽略此错误并继续进行。
我会确认版本。
$ helm version
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}
搜索仓库和软件包
在Helm中,我们把包(package)称为”Chart”。我们可以使用helm命令来搜索包。
搜索包装
使用`helm search hub`命令可以在Helm Hub中进行搜索。
$ helm search hub wordpress
URL CHART VERSION APP VERSION DESCRIPTION
https://hub.helm.sh/charts/bitnami/wordpress 9.4.0 5.4.2 Web publishing platform for building blogs and ...
https://hub.helm.sh/charts/presslabs/wordpress-... 0.10.2 0.10.2 Presslabs WordPress Operator Helm Chart
https://hub.helm.sh/charts/presslabs/wordpress-... v0.10.0 v0.10.0 A Helm chart for deploying a WordPress site on ...
添加本地仓库
在开始阶段,由于存储库没有任何配置,因此需要将存储库添加到本地环境中。
$ helm repo list
Error: no repositories to show
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories
$ helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com/
使用helm search repo命令在本地仓库中进行搜索。
$ helm search repo wordpress
NAME CHART VERSION APP VERSION DESCRIPTION
stable/wordpress 9.0.3 5.3.2 DEPRECATED Web publishing platform for building...
安装软件包
使用WordPress
我已经准备好安装了,接下来将从软件库安装软件包。
$ helm install wordpress stable/wordpress
WARNING: This chart is deprecated
NAME: wordpress
LAST DEPLOYED: Tue Aug 4 21:57:54 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
This Helm chart is deprecated
・・・
To access your WordPress site from outside the cluster follow the steps below:
1. Get the WordPress URL by running these commands:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w wordpress'
export SERVICE_IP=$(kubectl get svc --namespace default wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "WordPress URL: http://$SERVICE_IP/"
echo "WordPress Admin URL: http://$SERVICE_IP/admin"
2. Open a browser and access WordPress using the obtained URL.
3. Login with the following credentials below to see your blog:
echo Username: user
echo Password: $(kubectl get secret --namespace default wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode
安装完成后,将输出访问方法等信息。
您可以使用helm list命令来查看状态等信息。
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
wordpress default 1 2020-08-04 21:57:54.573193726 +0900 JST deployed wordpress-9.0.3 5.3.2
查看Kubernetes资源
使用 kubectl 命令检查 Kubernetes 资源。
$ kubectl get pod | grep word
wordpress-5667d74df4-bdkmm 0/1 Pending 0 4m44s
wordpress-mariadb-0 0/1 Pending 0 4m44s
$ kubectl get svc | grep word
wordpress LoadBalancer 10.110.221.143 10.20.30.151 80:30801/TCP,443:32703/TCP 4m55s
wordpress-mariadb ClusterIP 10.105.56.50 <none> 3306/TCP 4m55s
您有两个Pod和两个Service部署,但是Pod目前处于Pending状态。
我要查看Pod的详细信息。
$ kubectl describe pod wordpress-mariadb-0
Name: wordpress-mariadb-0
Namespace: default
・・・
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 69s (x3 over 2m39s) default-scheduler running "VolumeBinding" filter plugin for pod "wordpress-mariadb-0": pod has unbound immediate PersistentVolumeClaims
似乎无法求救到 PV。另一个 Pod 的状态也是一样的。
尽管PVC已经打包好了,但似乎需要提前准备PV。
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-wordpress-mariadb-0 Pending 6m
wordpress Pending 6m
nginx
我打算安装nginx作为一个不需要太多事前准备的选项。
先添加存储库,然后进行安装。
$ helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
$ helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com/
bitnami https://charts.bitnami.com/bitnami
$ helm install nginx-helm bitnami/nginx
NAME: nginx-helm
LAST DEPLOYED: Tue Aug 4 22:18:07 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Get the NGINX URL:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
Watch the status with: 'kubectl get svc --namespace default -w nginx-helm'
export SERVICE_IP=$(kubectl get svc --namespace default nginx-helm --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
echo "NGINX URL: http://$SERVICE_IP/"
查看Kubernetes资源
确认资源的方法是相同的。
$ kubectl get pod nginx-helm-5bc5bb68b9-5g8nh
NAME READY STATUS RESTARTS AGE
nginx-helm-5bc5bb68b9-5g8nh 1/1 Running 0 60s
$ kubectl get svc nginx-helm
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-helm LoadBalancer 10.100.171.112 10.20.30.152 80:31116/TCP,443:31492/TCP 12m
有一个Pod和一个Service已经部署了。
我也会确认沟通是否顺畅。
$ curl -s 10.20.30.152:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
・・・
总结
不需要准备清单文件,只需一条命令即可方便地部署Pod、Service等。然而,并不是所有的包都可以仅使用Helm进行部署,我了解到有些还需要事先准备。