helm简介
很多人都使用过Ubuntu下的ap-get或者CentOS下的yum, 这两者都是Linux系统下的包管理工具。采用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用;用户则可以以简单的方式查找、安装、升级、卸载应用程序。
我们可以将Helm看作Kubernetes下的apt-get/yum。Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。
对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。
除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。
Helm核心概念:
Chart—>Config—>Release
程序架构:
helm官方可用的chart列表:
helm官方可用的chart
go语言编写,基于gRPC协议与Tiller进行通信交互。
组件
Helm 有两个主要部分:
Helm Client 是最终用户的命令行客户端。客户端负责以下部分:
Tiller Server 是一个集群内服务,与 Helm 客户端进行交互,并与 Kubernetes API 服务进行交互。服务负责以下内容:
简而言之,客户端负责管理 chart,而服务端负责管理 release。
1、helm 3安装
wget https://get.helm.sh/helm-v3.2.0-linux-amd64.tar.gz
tar xf helm-v3.2.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version
2、添加主要的在线仓库
helm repo add stable https://kubernetes-charts.storage.googleapis.com/
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add apphub https://apphub.aliyuncs.com/
helm repo list
3、kubectl客户端安装
cat <
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1y
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum makecache -y
yum install -y kubectl-1.17.2
mkdir -p ~/.kube
vi ~/.kube/config
#rancher ui的config内容写入
kubectl get pod
4、安装一个简单的服务
helm pull stable/mysql
cd ./mysql
helm install testmysql2 .
5、卸载服务
helm ls
helm uninstall testmysql
6、存储持久化(K8S下存储太多了根据自己的业务来选择存储)
longhorn基础环境安装--每节点执行
yum install -y targetcli
systemctl start target
systemctl enable target
yum -y install iscsi-initiator-utils
systemctl start iscsi
systemctl enable iscsi
iscsiadm --version
rancher 商店安装longhorn-system
镜像加速
vi /etc/docker/daemon.json
"registry-mirrors": [
"https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com",
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://mirror.ccs.tencentyun.com"
]
systemctl daemon-reload
systemctl restart docker
helm安装chart需要根据脚本定义预先配置对应pv,chart启动后,服务绑定pv,成为pvc
如果pv选择 local node path插件,需要每个节点都配置好对应的目录
使用local node path插件存储status类数据的话,Pod转换节点之后,数据会丢失
因此,需要使用共享存储,目前选择longhorn(需提前安装环境及起服务)
修改配置,设置使用longhorn存储类,自动创建pvc
vi mysql/values.yaml
storageClassName: longhorn
kubectl get pvc
Kubernetes的三种外部访问方式:NodePort、LoadBalancer 和 Ingress
7、外部访问pod服务
方法一:hostPort端口映射,端口跟着node走
vi mysql/templates/deployment.yaml
containerPort下增加
hostPort: 33006
测试ok
mysql -h x192.168.1.10 -P33006 -u root -123456
方法二:NodePort端口群体映射,每个Node都会起一个32000端口,k8s自动管理流量
vi mysql/values.yaml
type: NodePort
port: 3306
nodePort: 32000
测试ok
mysql -h 192.168.1.10 -P32000 -u root -123456
每节点netstat -ntlup|grep 32000 ok
方法三:LoadBalancer 服务是暴露服务到 internet 的标准方式。在 GKE 上,这种方式会启动一个 Network Load Balancer,它将给你一个单独的 IP 地址,转发所有流量到你的服务。
1.安装metallb
配置网段与服务器IP在同一网段
configInline:
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.1.100-192.168.1.254
启动metallb
helm install metallb metallb
会启动两个服务controller和speaker,其中确保每台集群集群都有speaker
2.基础应用都是配置在helm 里面使用loadBalancerIP配置
templates/server.yaml配置:
{{- if and (eq .Values.service.type "LoadBalancer") .Values.service.loadBalancerIP }}
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
{{- end }}
values.yaml配置:
service:
type: LoadBalancer
port: xxx