安装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进行部署,我了解到有些还需要事先准备。

广告
将在 10 秒后关闭
bannerAds