kubernetes
1. helm简介
Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录。类似Linux系统的yum。
Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。
Helm当前最新版本 v3.2.0 官网:https://helm.sh/docs/intro/
2. helm安装
使用了html-v3.2.0的安装包helm-v3.2.0-linux-amd64.tar.gz
[root@server2 ~]# tar zxf helm-v3.2.0-linux-amd64.tar.gz
[root@server2 ~]# cd linux-amd64/
[root@server2 linux-amd64]# ls
helm LICENSE README.md
[root@server2 linux-amd64]# cp helm /usr/local/bin/
命令补齐
[kubeadm@server2 ~]$ echo "source <(helm completion bash)" >> ~/.bashrc
重新登陆生效
[root@server2 ~]# su - kubeadm
Last login: Mon May 11 09:16:14 CST 2020 on pts/1
Last failed login: Mon May 11 11:38:46 CST 2020 on pts/1
There was 1 failed login attempt since the last successful login.
[kubeadm@server2 ~]$ helm
completion dependency get install list plugin repo search status test upgrade version
create env history lint package pull rollback show template uninstall verify
Helm 添加第三方 Chart 库:
[kubeadm@server2 ~]$ helm repo add stable http://mirror.azure.cn/kubernetes/charts/
"stable" has been added to your repositories
[kubeadm@server2 ~]$ helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts/
[kubeadm@server2 ~]$ helm search repo redis
NAME CHART VERSION APP VERSION DESCRIPTION
stable/prometheus-redis-exporter 3.4.0 1.3.4 Prometheus exporter for Redis metrics
stable/redis 10.5.7 5.0.7 DEPRECATED Open source, advanced key-value stor...
stable/redis-ha 4.4.4 5.0.6 Highly available Kubernetes implementation of R...
stable/sensu 0.2.3 0.28 Sensu monitoring framework backed by the Redis ...
3. helm部署应用
[kubeadm@server2 ~]$ helm search repo redis-ha -l # 可以查看redis-ha的所有版本
NAME CHART VERSION APP VERSION DESCRIPTION
stable/redis-ha 4.4.4 5.0.6 Highly available Kubernetes implementation of R...
stable/redis-ha 4.4.3 5.0.6 Highly available Kubernetes implementation of R...
stable/redis-ha 4.4.2 5.0.6 Highly available Kubernetes implementation of R...
stable/redis-ha 4.4.1 5.0.6 Highly available Kubernetes implementation of R...
stable/redis-ha 4.4.0 5.0.6 Highly available Kubernetes implementation of R...
stable/redis-ha 4.3.4 5.0.6 Highly available Kubernetes implementation of R...
[kubeadm@server2 ~]$ helm pull stable/redis-ha # 拉取应用到本地,默认拉取最新版本
[kubeadm@server2 ~]$ ls # 拉取了一个redis-ha的压缩包
components.yaml dashrbac.yaml kube-flannel.yml manifest recommended.yaml redis-ha-4.4.4.tgz
[kubeadm@server2 ~]$ mkdir helm
[kubeadm@server2 ~]$ tar zxf redis-ha-4.4.4.tgz -C helm/ # 解压到helm目录
[kubeadm@server2 redis-ha]$ sudo yum install tree -y
[kubeadm@server2 redis-ha]$ tree . # 查看目录结构
.
├── Chart.yaml
├── ci
│ └── haproxy-enabled-values.yaml
├── OWNERS
├── README.md
├── templates
│ ├── _configs.tpl
│ ├── _helpers.tpl
│ ├── NOTES.txt
│ ├── redis-auth-secret.yaml
│ ├── redis-ha-announce-service.yaml
│ ├── redis-ha-configmap.yaml
│ ├── redis-ha-exporter-script-configmap.yaml
│ ├── redis-ha-pdb.yaml
│ ├── redis-haproxy-deployment.yaml
│ ├── redis-haproxy-serviceaccount.yaml
│ ├── redis-haproxy-servicemonitor.yaml
│ ├── redis-haproxy-service.yaml
│ ├── redis-ha-rolebinding.yaml
│ ├── redis-ha-role.yaml
│ ├── redis-ha-serviceaccount.yaml
│ ├── redis-ha-servicemonitor.yaml
│ ├── redis-ha-service.yaml
│ ├── redis-ha-statefulset.yaml
│ └── tests
│ ├── test-redis-ha-configmap.yaml
│ └── test-redis-ha-pod.yaml
└── values.yaml
3 directories, 25 files
3.1 部署一个redis
[kubeadm@server2 redis-ha]$ vim values.yaml
image:
repository: redis
tag: 5.0.6-alpine
pullPolicy: IfNotPresent
需要redis:5.0.6-alpine的镜像
[root@server1 harbor]# docker pull redis:5.0.6-alpine
[root@server1 harbor]# docker tag redis:5.0.6-alpine reg.westos.org/library/redis:5.0.6-alpine
[root@server1 harbor]# docker push reg.westos.org/library/redis
[kubeadm@server2 redis-ha]$ kubectl create namespace redis # 创建一个redis的namespace
namespace/redis created
[kubeadm@server2 redis-ha]$ helm install redis-ha . -n redis # 名字redis-ha,.在当前目录,-n redis 指定namepace为redis
NAME: redis-ha
LAST DEPLOYED: Mon May 11 13:04:20 2020
NAMESPACE: redis
STATUS: deployed
REVISION: 1
NOTES:
Redis can be accessed via port 6379 and Sentinel can be accessed via port 26379 on the following DNS name from within your cluster:
redis-ha.redis.svc.cluster.local
To connect to your Redis server:
1. Run a Redis pod that you can use as a client:
kubectl exec -it redis-ha-server-0 sh -n redis
2. Connect using the Redis CLI:
redis-cli -h redis-ha.redis.svc.cluster.local
[kubeadm@server2 redis-ha]$ kubectl -n redis get all # redis-ha部署完成
NAME READY STATUS RESTARTS AGE
pod/redis-ha-server-0 2/2 Running 0 2m16s
pod/redis-ha-server-1 2/2 Running 0 107s
pod/redis-ha-server-2 0/2 Pending 0 77s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/redis-ha ClusterIP None <none> 6379/TCP,26379/TCP 2m19s
service/redis-ha-announce