资源规划
组件 | LTSR003 | LTSR005 | LTSR006 |
---|---|---|---|
OS | centos7.6 | centos7.6 | centos7.6 |
Docker | docker-ce-18.06.1 | docker-ce-18.06.1 | docker-ce-18.06.1 |
kubeadm | kubeadm-1.18.0 | kubeadm-1.18.0 | kubeadm-1.18.0 |
kubectl | kubectl-1.18.0 | kubectl-1.18.0 | kubectl-1.18.0 |
kubelet | kubelet-1.18.0 | kubelet-1.18.0 | kubelet-1.18.0 |
Helm | helm-3.2.1 | N.A | N.A |
安装介质
版本:helm-v3.2.1-linux-amd64.tar.gz
下载:https://github.com/helm/helm/releases、https://helm.sh/docs/intro/quickstart
环境准备
安装K8s
参考:《CentOS7.6_kubeadm快速部署K8s集群》
安装Helm
解压缩
# root
cd ~
wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
tar zxvf helm-v3.2.1-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
rm -rf linux-amd64/
rm -rf helm-v3.2.1-linux-amd64.tar.gz
配置仓库
新增Chart仓库
# 微软仓库,基本上官网有的chart这里都有
helm repo add azure http://mirror.azure.cn/kubernetes/charts
# 阿里云仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add aliyun-hub https://apphub.aliyuncs.com
helm repo add aliyun-incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator
# 谷歌仓库
helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
# 官方仓库,国内基本无法使用
helm repo add official https://hub.kubeapps.com/charts/incubator
更新Chart仓库
helm repo update
搜索Chart仓库
helm repo list
helm search repo aliyun
移除Chart仓库
helm repo remove official
安装Helm WebUI
搜索并安装WebUI
helm search repo weave
helm show chart azure/weave-scope
# 安装应用,语法:helm install ${自定义名称} ${helm仓库Chart应用名称}
helm install helm-ui azure/weave-scope
helm list
helm status helm-ui
暴露端口
kubectl get svc
kubectl edit svc helm-ui-weave-scope
修改以下内容:
spec:
....
type: NodePort
....
自定义Chart
- 使用命令创建Chart。
说明:helm create mychart
cd mychart
- Chart.yaml:当前Chart属性配置信息。
- templates:编写yaml的存放目录。
- values.yaml:全局变量(yaml中可引用)。
- 在templates文件夹下创建deployment.yaml和service.yaml。
rm -rf templates/*
cd templates
kubectl create deployment web --image=nginx --dry-run -o yaml > deployment.yaml
kubectl expose deployment web --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: web
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
service.yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: web
name: web
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: web
type: NodePort
status:
loadBalancer: {}
安装Chart。
# 返回到Chart上一级目录
cd ../../
helm install web mychart
helm status web
升级。
helm upgrade web mychart/
打包。
helm package mychart/
mv mychart-0.1.0.tgz helm-mychart-0.1.0.tgz
Chart高效复用
1. 动态传参
- 思路
通过传递参数,动态渲染模板,yaml内容动态传入参数生成(由values.yaml文件定义全局变量)。
- 步骤
- 在values.yaml定义变量和值。
- 在具体yaml文件获取定义变量值(取值表达式:{{ .Values.变量名称}})。
- 参数项
- image:镜像
- tag:版本
- label:名称
- port:端口
- replicas:副本数
示例
values.yaml
replicas: 1
image: nginx
tag: 1.16
label: nginx
port: 80
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name}}-deploy
spec:
replicas: 1
selector:
matchLabels:
app: {{ .Values.label}}
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: {{ .Values.label}}
spec:
containers:
- image: {{ .Values.image}}
name: {{ .Values.label}}
resources: {}
status: {}
service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name}}-svc
spec:
ports:
- port: {{ .Values.port}}
protocol: TCP
targetPort: 80
selector:
app: {{ .Values.label}}
type: NodePort
status:
loadBalancer: {}
执行:
helm install --dry-run web2 mychart/
helm install web2 mychart/
kubectl get pods,svc
2. 安装前自定义配置选项
自定义选项是因为并不是所有的chart都能按照默认配置运行成功, 可能会需要一些环境
依赖, 例如 PV。所以我们需要自定义chart配置选项, 安装过程中有两种方法可以传递配置数据:- —values( 或-f) : 指定带有覆盖的YAML文件。 这可以多次指定, 最右边的文件优先。使用时,先将修改的变量写到一个文件中。
- —set: 在命令行上指定替代。 如果两者都用, —set优先级高。
配置如下:helm search repo mysql
helm show values azure/mysql
mkdir db-mysql && cd ./db-mysql
vi config.yaml
安装:persistence:
enabled: true
storageClass: "mysql-nfs-storage"
accessMode: ReadWriteOnce
size: 8Gi
mysqlUser: "k8s"
mysqlPassword: "123456"
mysqlDatabase: "k8s"
helm pull azure/mysql --untar
helm install db -f config.yaml azure/mysql
kubectl get pods,svc
# kubectl describe pod ${pod-name}
kubectl run -it db-client --rm --restart=Never --image=mysql:5.7 -- bash
mysql -hdb-mysql -uk8s -p123456
mysql> show databases;
基本使用
1. 安装
helm install web azure/nginx-ingress
2. 升级
helm upgrade --set imageTag=1.17 web nginx
helm upgrade -f values.yaml web nginx
3. 回滚
helm get all --revision 1 web
helm history web
helm rollback web 1
4. 卸载
helm uninstall web
补充
NFS安装配置
1. 安装NFS
yum install -y nfs-utils
yum -y install rpcbind
2. 配置NFS服务端数据目录
内容如下:mkdir -p /nfs/k8s/
chmod 755 /nfs/k8s
vim /etc/exports
/nfs/k8s/ *(async,insecure,no_root_squash,no_subtree_check,rw)
3. 启动服务查看状态
# ltsr007
systemctl start nfs.service
systemctl enable nfs.service
showmount -e
4. 客户端
# 客户端不需要启动nfs服务
# 开机启动
sudo systemctl enable rpcbind.service
# 启动rpcbind服务
sudo systemctl start rpcbind.service
# 检查NFS服务器端是否有目录共享
showmount -e ltsr007
PV配置
这里采用StorageClass动态实现PV的方式,创建好StorageClass对象,只要在helm的values.yaml文件中指定storageClass为StorageClass名称即可动态在NFS上创建PV以及PVC。1. 创建Provisioner
Provisioner是NFS的自动配置程序,可以使用自动配置好的NFS服务器,来自动创建持久卷,也就是自动创建PV。
内容如下:cd ~/k8s/
vi nfs-client.yaml
执行yaml:apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
selector:
matchLabels:
app: nfs-client-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: default-admin
containers:
- name: nfs-client-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 192.168.0.17
- name: NFS_PATH
value: /nfs/k8s
volumes:
- name: nfs-client-root
nfs:
server: 192.168.0.17
path: /nfs/k8s
kubectl create -f nfs-client.yaml
2. 创建ServiceAccount
给Provisioner授权,使得Provisioner拥有对NFS增删改查的权限。
内容如下: ```yamlvi nfs-client-sa.yaml
apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: gmo name: default-admin namespace: default
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: default-crb roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects:
- kind: ServiceAccount
name: default-admin
namespace: default
其中的ServiceAccount name需要和nfs-client.yaml中的serviceAccountName一致。
```bash
kubectl create -f nfs-client-sa.yaml
3. 创建StorageClass对象
内容如下:vi nfs-client-class.yaml
provisioner需要和nfs-client.yaml中的PROVISIONER_NAME一致。apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: mysql-nfs-storage
provisioner: fuseim.pri/ifs
kubectl create -f nfs-client-class.yaml
参考
| 序号 | 组件 | 站点 | | :—-: | —- | —- | | 1 | helm3 | https://www.qedev.com/cloud/112258.html | | 2 | helm3 公共仓库 | https://www.qedev.com/cloud/112418.html | | 3 | helm3 私有仓库 | https://www.qedev.com/cloud/112560.html | | 4 | helm3 chart | https://www.qedev.com/cloud/113545.html | | 5 | helm3 release | https://www.qedev.com/cloud/113515.html | | 6 | helm3 gitlab | https://www.qedev.com/cloud/115562.html | | 7 | helm3 nginx-ingress | https://www.qedev.com/cloud/16651.html | | 8 | helm3 gitlab nfs | https://www.qedev.com/cloud/15950.html | | 9 | helm3 nexus | https://www.qedev.com/cloud/15734.html | | 10 | helm3 heapster | https://www.qedev.com/cloud/15831.html | | 11 | helm3 kubernetes-dashboard | https://www.qedev.com/cloud/15152.html | | 12 | helm3 harbor | https://www.qedev.com/cloud/14146.html | | 13 | helm3 prometheus | https://www.qedev.com/cloud/9491.html | | 14 | helm3 grafana | https://www.qedev.com/cloud/9331.html | | 15 | helm3 grafana && prometheus | https://www.qedev.com/cloud/10419.html | | 16 | helm3 efk - elasticsearch | https://www.qedev.com/cloud/10361.html | | 17 | helm3 efk - fluentd | https://www.qedev.com/cloud/10476.html | | 18 | helm3 efk - kibana | https://www.qedev.com/cloud/10483.html | | 19 | helm3 istio | https://www.qedev.com/cloud/9364.html | | 20 | helm3 mysql | https://www.qedev.com/cloud/8880.html | | 21 | helm3 zookeeper | https://www.qedev.com/cloud/8746.html | | 22 | helm3 sonarqube | https://www.qedev.com/cloud/8396.html | | 23 | helm spark | https://www.cnblogs.com/lanrish/p/12267623.html | | 24 | helm flink | https://www.yuque.com/apachecn/flink-doc-zh/docs_1.7_109 |