K8s----Helm包管理工具

  • 1 Helm 部署
  • 2 Helm 部署redis应用
  • 3 Helm部署metrics-server


1 Helm 部署

(1)下载helm软件包

  • 官网:https://helm.sh/docs/intro/quickstart/

helm创建ingress域名 helm部署redis cluster_命名空间

(2)补齐helm命名

echo "source <(helm completion bash)" >> ~/.bashrc
source ~/.bashrc

(3)搜索官方helm hub chart库:helm search hub redis-ha

helm创建ingress域名 helm部署redis cluster_bash_02

(4)Helm 添加第三方 Chart 库

helm repo add dandydev https://dandydeveloper.github.io/charts
  • 列出chart库:helm repo list

helm创建ingress域名 helm部署redis cluster_redis_03

2 Helm 部署redis应用

(1)搜索redis-ha:helm search repo redis-ha

helm创建ingress域名 helm部署redis cluster_bash_04


(2)拉取应用到本地:helm pull dandydev/redis-ha

helm创建ingress域名 helm部署redis cluster_helm创建ingress域名_05

  • 解压压缩包:tar zxf redis-ha-4.12.9.tgz

helm创建ingress域名 helm部署redis cluster_bash_06


(3)进入redis-ha应用的目录:cd redis-ha/

helm创建ingress域名 helm部署redis cluster_helm创建ingress域名_07

  • 编辑yaml文件:vim values

helm创建ingress域名 helm部署redis cluster_helm创建ingress域名_08

  • 将部署应用所需的镜像提前下载到私有仓库

helm创建ingress域名 helm部署redis cluster_bash_09

  • 由于只有两个子节点,而values文件中设置的副本数量为3,故将反亲和性改为false

helm创建ingress域名 helm部署redis cluster_helm创建ingress域名_10

helm创建ingress域名 helm部署redis cluster_redis_11

  • 查看命名空间:kubectl get ns

helm创建ingress域名 helm部署redis cluster_redis_12

(2)安装redis-ha应用:helm install redis-ha .

helm创建ingress域名 helm部署redis cluster_redis_13

  • 查看pod的信息:kubectl get pod,创建了三个副本,每个pod中yunxing2个容器

helm创建ingress域名 helm部署redis cluster_命名空间_14

  • 查看pv的信息:kubectl get pv

helm创建ingress域名 helm部署redis cluster_bash_15

  • 查看服务的信息:kubectl get svc

helm创建ingress域名 helm部署redis cluster_命名空间_16


2 测试

(1)进入名为redis-ha-server-1的pod的命名行:

kubectl exec -it redis-ha-server-0 sh -n default
  • 连接本地的 redis 服务:redis-cli,info查看redis服务的信息,redis的master在redis-ha-server-0上,有两个副本

helm创建ingress域名 helm部署redis cluster_bash_17

helm创建ingress域名 helm部署redis cluster_helm创建ingress域名_18

  • 在master上将字符串值 name关联到 tom

helm创建ingress域名 helm部署redis cluster_redis_19

  • 连接副本的 redis 服务(slave的ip可在master通过info端查看),在master备份的数据被备份到slave

helm创建ingress域名 helm部署redis cluster_命名空间_20


helm创建ingress域名 helm部署redis cluster_bash_21

  • 连接副本的 redis 服务(slave的ip可在master通过info端查看)

helm创建ingress域名 helm部署redis cluster_命名空间_22

helm创建ingress域名 helm部署redis cluster_命名空间_23

(2)删除master的pod

kubectl delete pod redis-ha-server-0
kubectl get pod
  • 此时运行master的pod被删除,redis将在slave中重新选择master

helm创建ingress域名 helm部署redis cluster_redis_24

  • 连接redis-ha-server-1本地的 redis 服务:redis-cli,info查看redis服务的信息,redis的master切换到redis-ha-server-1上,由于被删除的pod还未重启成功,此时master有1个slave
kubectl exec -it redis-ha-server-1 sh -n default

helm创建ingress域名 helm部署redis cluster_命名空间_25

helm创建ingress域名 helm部署redis cluster_命名空间_26

  • 连接redis-ha-server-2本地的 redis 服务:redis-cli,info查看redis服务的信息,该redis为slave

helm创建ingress域名 helm部署redis cluster_redis_27

helm创建ingress域名 helm部署redis cluster_helm创建ingress域名_28

(2) redis-ha-server-0恢复后

  • 查看pod信息:kubectl get pod -o wide

helm创建ingress域名 helm部署redis cluster_helm创建ingress域名_29

  • 进入名为redis-ha-server-2的pod的命名行:
kubectl exec -it redis-ha-server-2 sh -n default
  • redis的master仍在此pod,且此时redis-ha-server-0是redis-ha-server-2的slave

helm创建ingress域名 helm部署redis cluster_helm创建ingress域名_30

helm创建ingress域名 helm部署redis cluster_bash_31

  • 进入名为redis-ha-server-1的pod的命名行:redis-ha-server-1运行的redis为slave
kubectl exec -it redis-ha-server-1 sh -n default

helm创建ingress域名 helm部署redis cluster_bash_32


helm创建ingress域名 helm部署redis cluster_命名空间_33

  • 进入名为redis-ha-server-1的pod的命名行:redis-ha-server-1运行的redis为slave
kubectl exec -it redis-ha-server-0 sh -n default

helm创建ingress域名 helm部署redis cluster_redis_34

helm创建ingress域名 helm部署redis cluster_bash_35

3 Helm部署metrics-server

(1)创建命名空间:kubectl create namespace metrics-server

(2)拉取metrics-server:helm pull bitnami/metrics-server

  • 编辑文件:vim metrics-server/values.yaml

helm创建ingress域名 helm部署redis cluster_redis_36

helm创建ingress域名 helm部署redis cluster_bash_37

(3)部署metrics-server:helm install metrics-server . -n metrics-server

helm创建ingress域名 helm部署redis cluster_bash_38

(4)查看metrics-server命名空间的信息:

kubectl get all -n metrics-server

helm创建ingress域名 helm部署redis cluster_命名空间_39

  • 查看pod的信息,pod未成功运行:存活探针失败
kubectl get pod -n metrics-serve
kubectl -n metrics-server describe metrics-server-777f7bd69b-h7pp5

helm创建ingress域名 helm部署redis cluster_helm创建ingress域名_40


helm创建ingress域名 helm部署redis cluster_bash_41

  • 查看pod的日志信息:
kubectl -n metrics-server logs metrics-server-777f7bd69b-h7pp5

helm创建ingress域名 helm部署redis cluster_命名空间_42


报错:dial tcp: lookup server3 on 10.96.0.10:53: no such host, unable to fully scrape metrics from node server2: unable to fetch metrics from node server2: Get “https://server2:10250/stats/summary?only_cpu_and_memory=true”: dial tcp: lookup server2 on 10.96.0.10:53: no such host, unable to fully scrape metrics from node server4: unable to fetch metrics from node server4: Get “https://server4:10250/stats/summary?only_cpu_and_memory=true”: dial tcp: lookup server4 on 10.96.0.10:53: no such host]

错误的原因:这是因为没有内网的DNS服务器,所以metrics-server无法解析节点名字。可以直接修改coredns的configmap,讲各个节点的主机名加入到hosts中,这样所有Pod都可以从CoreDNS中解析各个节点的名字

解决方法

  • 修改coredns的configmap:kubectl edit configmaps coredns -n kube-system

helm创建ingress域名 helm部署redis cluster_bash_43

  • 重载coredns
kubectl  -n kube-system delete pod coredns-7f89b7bc75-h6kcl
kubectl  -n kube-system delete pod coredns-7f89b7bc75-tdtjt
kubectl  -n metrics-server get all

helm创建ingress域名 helm部署redis cluster_redis_44

  • 查看metrics-server命名空间的信息:kubectl -n metrics-server get all,pod启动成功

helm创建ingress域名 helm部署redis cluster_redis_45

(5)测试:kubectl top node,查看节点的资源使用信息

helm创建ingress域名 helm部署redis cluster_命名空间_46