概述
Helm部署rancher 高可用集群
Helm简介
Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。可以把Helm比作CentOS的yum工具。 Helm有如下几个基本概念:
Chart: 是Helm管理的安装包,里面包含需要部署的安装包资源。可以把Chart比作CentOS yum使用的rpm文件。
Release:是chart的部署实例,一个chart在一个Kubernetes集群上可以有多个release,即这个chart可以被安装多次
Repository:chart的仓库,用于发布和存储chart
下载:https://github.com/helm/helm/releases
查看pods情况
kubectl get pods --namespace=kube-system
kubectl get pods --all-namespaces
如果想删除它,则先找到deployment,再删除它即可
kangming@ubuntu26:~$ kubectl get deployment --namespace=kube-system
NAMEREADY UP-TO-DATE AVAILABLE AGE
calico-kube-controllers 1/1 11 4h23m
coredns 2/2 22 4h22m
coredns-autoscaler1/1 11 4h22m
metrics-server1/1 11 4h18m
tiller-deploy 0/1 10 4h15m
kangming@ubuntu26:~$ kubectl delete deployment tiller-deploy --namespace=kube-system
deployment.apps "tiller-deploy" deleted
如果要详细的查看某个pod,则可以describe
kubectl describe pod rke-coredns-addon-deploy-job-qz8v6--namespace=kube-system
helm3安装
最新稳定版本:v3.9.2
下载
https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz
安装
tar -zxvf helm-v3.9.2-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
sudo chmod +x /usr/local/bin/helm
查看官方文档:
Helm | Docs
Helm | 快速入门指南
添加一个chart仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
查看可安装chart列表
kangming@ubuntu26:~/rancher$ helm search repo bitnami
NAMECHART VERSION APP VERSION DESCRIPTION
bitnami/airflow 13.0.22.3.3 Apache Airflow is a tool to express and execute...
bitnami/apache9.1.162.4.54Apache HTTP Server is an open-source HTTP serve...
bitnami/argo-cd 4.0.6 2.4.8 Argo CD is a continuous delivery tool for Kuber...
bitnami/argo-workflows2.3.8 3.3.8 Argo Workflows is meant to orchestrate Kubernet...
安装chart示例
##确定我们可以拿到最新的charts列表
helm repo update
#安装一个mysql的chat示例
helm install bitnami/mysql --generate-name
NAME: mysql-1659686641
LAST DEPLOYED: Fri Aug5 16:04:04 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mysql
CHART VERSION: 9.2.5
APP VERSION: 8.0.30
** Please be patient while the chart is being deployed **
Tip:
Watch the deployment status using the command: kubectl get pods -w --namespace default
Services:
echo Primary: mysql-1659686641.default.svc.cluster.local:3306
Execute the following to get the administrator credentials:
echo Username: root
MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql-1659686641 -o jsonpath="{.data.mysql-root-password}" | base64 -d)
To connect to your database:
1. Run a pod that you can use as a client:
kubectl run mysql-1659686641-client --rm --tty -i --restart='Never' --imagedocker.io/bitnami/mysql:8.0.30-debian-11-r4 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
2. To connect to primary service (read/write):
mysql -h mysql-1659686641.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
在上面的例子中,bitnami/mysql这个chart被发布,名字是mysql-1659686641。我们将所有pods列出会发现多了mysql的pod.
可以通过执行 helm show chart bitnami/mysql 命令简单的了解到这个chart的基本信息。 或者您可以执行 helm show all bitnami/mysql 获取关于该chart的所有信息。
每当您执行 helm install 的时候,都会创建一个新的发布版本。 所以一个chart在同一个集群里面可以被安装多次,每一个都可以被独立的管理和升级。
更多信息helm使用方法查看:https://helm.sh/zh/docs/intro/using_helm/
通过Helm您可以很容易看到哪些chart被发布了
kangming@ubuntu26:~/rancher$ helm list
NAMENAMESPACE REVISIONUPDATED STATUSCHART APP VERSION
mysql-1659686641default 1 2022-08-05 16:04:04.411386078 +0800 CST deployedmysql-9.2.5 8.0.30
卸载一个版本
kangming@ubuntu26:~/rancher$ helm uninstall mysql-1659686641
release "mysql-1659686641" uninstalled
该命令会从Kubernetes卸载 mysql-1659686641, 它将删除和该版本相关的所有相关资源(service、deployment、 pod等等)甚至版本历史。
如果您在执行 helm uninstall 的时候提供 --keep-history 选项, Helm将会保存版本历史。 您可以通过命令查看该版本的信息
helm status mysql-1659686641
helm 帮助文档
helm get -h
helm查找
-
helm search hub 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。
-
helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。
使用 helm install 命令来安装一个新的 helm 包。最简单的使用方法只需要传入两个参数:你命名的release名字和你想安装的chart的名称。
helm install happy-panda bitnami/wordpress
helm3安装rancher(自签证书方式)
1,添加Chart仓库地址
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
2,生成定义证书
可参考:生成自签名SSL证书
一键生成证书脚本,rancher官方,保存为key.sh
#!/bin/bash -e
help ()
{
echo' ================================================================ '
echo' --ssl-domain: 生成ssl证书需要的主域名,如不指定则默认为www.rancher.local,如果是ip访问服务,则可忽略;'
echo' --ssl-trusted-ip: 一般ssl证书只信任域名的访问请求,有时候需要使用ip去访问server,那么需要给ssl证书添加扩展IP,多个IP用逗号隔开;'
echo' --ssl-trusted-domain: 如果想多个域名访问,则添加扩展域名(SSL_TRUSTED_DOMAIN),多个扩展域名用逗号隔开;'
echo' --ssl-size: ssl加密位数,默认2048;'
echo' --ssl-cn: 国家代码(2个字母的代号),默认CN;'
echo' 使用示例:'
echo' ./create_self-signed-cert.sh --ssl-domain=www.test.com --ssl-trusted-domain=www.test2.com '
echo' --ssl-trusted-ip=1.1.1.1,2.2.2.2,3.3.3.3 --ssl-size=2048 --ssl-date=3650'
echo' ================================================================'
}
case "$1" in
-h|--help) help; exit;;
esac
if [[ $1 == '' ]];then
help;
exit;
fi
CMDOPTS="$*"
for OPTS in $CMDOPTS;
do
key=$(echo ${OPTS} | awk -F"=" '{print $1}' )
value=$(echo ${OPTS} | awk -F"=" '{print $2}' )
case "$key" in
--ssl-domain) SSL_DOMAIN=$value ;;
--ssl-trusted-ip) SSL_TRUSTED_IP=$value ;;
--ssl-trusted-domain) SSL_TRUSTED_DOMAIN=$value ;;
--ssl-size) SSL_SIZE=$value ;;
--ssl-date) SSL_DATE=$value ;;
--ca-date) CA_DATE=$value ;;
--ssl-cn) CN=$value ;;
esac
done
# CA相关配置
CA_DATE=${CA_DATE:-3650}
CA_KEY=${CA_KEY:-cakey.pem}
CA_CERT=${CA_CERT:-cacerts.pem}
CA_DOMAIN=cattle-ca
# ssl相关配置
SSL_CONFIG=${SSL_CONFIG:-$PWD/openssl.cnf}
SSL_DOMAIN=${SSL_DOMAIN:-'www.rancher.local'}
SSL_DATE=${SSL_DATE:-3650}
SSL_SIZE=${SSL_SIZE:-2048}
## 国家代码(2个字母的代号),默认CN;
CN=${CN:-CN}
SSL_KEY=$SSL_DOMAIN.key
SSL_CSR=$SSL_DOMAIN.csr
SSL_CERT=$SSL_DOMAIN.crt
echo -e "