标签:当前目录 min ini extend util docker-ce creat happy fstab
1、安装基础软件
yum install -y vim net-tools wget lrzsz
2、防火墙
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g‘ /etc/selinux/config setenforce 0 systemctl stop firewalld.service && systemctl disable firewalld.service
3、时间同步
yum install -y ntp systemctl enable ntpd && systemctl start ntpd timedatectl set-timezone Asia/Shanghai timedatectl set-ntp yes ntpq -p
4、内核参数
cat >> /etc/sysctl.conf<<EOF net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.ipv4.neigh.default.gc_thresh1=4096 net.ipv4.neigh.default.gc_thresh2=6144 net.ipv4.neigh.default.gc_thresh3=8192 EOF
#加载 sysctl -p
5、加载模块
cat >modules.sh <<EOF
modprobe br_netfilter
modprobe ip6_udp_tunnel
modprobe ip_set
modprobe ip_set_hash_ip
modprobe ip_set_hash_net
modprobe iptable_filter
modprobe iptable_nat
modprobe iptable_mangle
modprobe iptable_raw
modprobe nf_conntrack_netlink
modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_defrag_ipv4
modprobe nf_nat
modprobe nf_nat_ipv4
modprobe nf_nat_masquerade_ipv4
modprobe nfnetlink
modprobe udp_tunnel
#modprobe VETH
#modprobe VXLAN
modprobe x_tables
modprobe xt_addrtype
modprobe xt_conntrack
modprobe xt_comment
modprobe xt_mark
modprobe xt_multiport
modprobe xt_nat
modprobe xt_recent
modprobe xt_set
modprobe xt_statistic
modprobe xt_tcpudp
EOF
#执行
sh modules.sh
6、挂载数据盘
挂载阿里云数据盘
fdisk /dev/vdb n,p,1,回车,回车,wq fdisk -l mkfs.ext4 /dev/vdb1 echo ‘/dev/vdb1 /opt ext4 defaults 0 0‘ >>/etc/fstab mount -a df -h
7、安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce -y
#更改docker存储路径
mkdir -p /opt/data/docker sed -i "s#-H fd:#-g /opt/data/docker -H fd:#g" /lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
systemctl status docker
#调整参数
cat >/etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://mirror.nexus.wmqhealth.com"], "max-concurrent-downloads": 5, "max-concurrent-uploads": 5, "storage-driver": "overlay2", "storage-opts": ["overlay2.override_kernel_check=true"], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } } EOF #重启 systemctl restart docker.service systemctl status docker.service
Rancher依靠私有镜像仓库进行离线安装,必须拥有自己的私有镜像仓库或其他方式将所有Docker镜像分发到每个节点。HA安装需要以下CLI工具, 确保这些工具安装在您的工作站或者笔记本上,并且您的工作站或者笔记本需要有权限访问Rancher环境。
1)kubectl:Kubernetes命令行工具;
2)rke:Rancher Kubernetes Engine,用于构建Kubernetes集群的cli;
3)helm:Kubernetes的包管理(客户端helm和服务器Tiller)。
这些安装包可从rancher网站(https://www.cnrancher.com/docs/rancher/v2.x/cn/install-prepare/download/)下载
mkdir -p /opt/rancher/cli && cd /opt/rancher/cli wget https://www.cnrancher.com/download/kubernetes/linux-amd64-v1.14.3-kubectl && wget https://www.cnrancher.com/download/rke/v0.2.4-rke_linux-amd64 && wget https://www.cnrancher.com/download/helm/helm-v2.14.1-linux-amd64.tar.gz tar -zxvf helm-v2.14.1-linux-amd64.tar.gz && rm -rf helm-v2.14.1-linux-amd64.tar.gz mv linux-amd64/{helm,tiller} ./ && rm -rf linux-amd64 mv linux-amd64-v1.14.3-kubectl kubectl mv v0.2.4-rke_linux-amd64 rke chmod +x kubectl rke
echo "export PATH=/opt/rancher/cli:\$PATH" >> /etc/profile source /etc/profile #centos7.6第一次需添加所有用户执行该命令,后续修改不用添加: echo "source /etc/profile" >> /etc/bashrc
Rancher HA安装需要使用来自3个源的镜像,将3个源合并到一个名为rancher-images.txt的文件中。
1、在版本发布页面,找到需要安装的Rancher 2.xx版本。不要下载的版本标示rc或者Pre-release,因为它们不适用于稳定的生产环境。https://github.com/rancher/rancher/releases/tag/v2.2.4
2、从发行版的 Assets 部分,下载以下三个文件,这些文件是在离线环境中安装Rancher所必需的:
1)rancher-images.txt:此文件包含安装Rancher所需的所有镜像的列表。
2)rancher-save-images.sh:此脚本rancher-images.txt从Docker Hub中下载所有镜像并将所有镜像保存为rancher-images.tar.gz。
3)rancher-load-images.sh:此脚本从rancher-images.tar.gz文件加载镜像,并将其推送到您的私有镜像仓库。
把下载的三个文件存放在下面的目录中
mkdir /opt/rancher/deploy && cd /opt/rancher/deploy
3、确保rancher-save-images.sh可执行。
chmod +x rancher-save-images.sh
4、通过RKE生成镜像清单
rke config --system-images -all >> ./rancher-images.txt
5、对镜像列表进行排序和去重,以去除重复的镜像。
sort -u rancher-images.txt -o rancher-images.txt
6、复制以下脚本保存为rancher-save-images.sh
#!/bin/bash # 定义日志 workdir=`pwd` log_file=${workdir}/sync_images_$(date +"%Y-%m-%d").log logger() { log=$1 cur_time=‘[‘$(date +"%Y-%m-%d %H:%M:%S")‘]‘ echo ${cur_time} ${log} | tee -a ${log_file} } list="rancher-images.txt" #images="rancher-images.tar.gz" POSITIONAL=() while [[ $# -gt 0 ]]; do key="$1" case $key in -i|--images) images="$2" shift # past argument shift # past value ;; -l|--image-list) list="$2" shift # past argument shift # past value ;; -h|--help) help="true" shift ;; esac done usage () { echo "USAGE: $0 [--image-list rancher-images.txt] [--images rancher-images.tar.gz]" echo " [-l|--images-list path] text file with list of images. 1 per line." echo " [-l|--images path] tar.gz generated by docker save." echo " [-h|--help] Usage message" } if [[ $help ]]; then usage exit 0 fi set -e -x mkdir -p rancher-images-$(date +"%Y-%m-%d") cd rancher-images-$(date +"%Y-%m-%d") for i in $(cat ${list}); do docker pull ${i} if [ $? -ne 0 ]; then logger "${i} pull failed." else logger "${i} pull successfully." fi docker save ${i} | gzip > $(echo $i | sed "s#/#-#g; s#:#-#g").tgz if [ $? -ne 0 ]; then logger "${i} save failed." else logger "${i} save successfully." fi done
7、复制以下脚本保存为rancher-load-images.sh
#!/bin/bash # 定义日志 workdir=`pwd` log_file=${workdir}/sync_images_$(date +"%Y-%m-%d").log logger() { log=$1 cur_time=‘[‘$(date +"%Y-%m-%d %H:%M:%S")‘]‘ echo ${cur_time} ${log} | tee -a ${log_file} } POSITIONAL=() while [[ $# -gt 0 ]]; do key="$1" case $key in -i|--images-path) images_path="$2" shift # past argument shift # past value ;; -l|--image-list) list="$2" shift # past argument shift # past value ;; -h|--help) help="true" shift ;; esac done usage () { echo "USAGE: $0 [--image-list rancher-images.txt] [--images rancher-images.tar.gz]" echo " [-l|--images-list path] text file with list of images. 1 per line." echo " [-l|--images path] tar.gz generated by docker save." echo " [-h|--help] Usage message" } if [[ $help ]]; then usage exit 0 fi set -e -x # 镜像压缩文件列表 images=$(ls $images_path | grep ".tgz") cd $images_path # 导入镜像 docker_load () { for imgs in $(echo ${images}); do gunzip -c ${imgs} | docker load if [ $? -ne 0 ]; then logger "${imgs} load failed." else logger "${imgs} load successfully." fi done } docker_load
8、复制以下脚本保存为rancher-push-images.sh
#!/bin/bash ## 镜像上传说明 # 需要先在镜像仓库中创建 rancher 项目 # 根据实际情况更改以下私有仓库地址 # 定义日志 workdir=`pwd` log_file=${workdir}/sync_images_$(date +"%Y-%m-%d").log logger() { log=$1 cur_time=‘[‘$(date +"%Y-%m-%d %H:%M:%S")‘]‘ echo ${cur_time} ${log} | tee -a ${log_file} } images_hub() { while true; do read -p "输入镜像仓库地址(不加http/https): " registry read -p "输入镜像仓库用户名: " registry_user read -p "输入镜像仓库用户密码: " registry_password echo "您设置的仓库地址为: ${registry},用户名: ${registry_user},密码: xxx" read -p "是否确认(Y/N): " confirm if [ $confirm != Y ] && [ $confirm != y ] && [ $confirm == ‘‘ ]; then echo "输入不能为空,重新输入" else break fi done } images_hub echo "镜像仓库 $(docker login -u ${registry_user} -p ${registry_password} ${registry})" images=$(docker images -a | grep -v TAG | awk ‘{print $1 ":" $2}‘) namespace=rancher docker_push() { for imgs in $(echo ${images}); do n=$(echo ${imgs} | awk -F"/" ‘{print NF-1}‘) #如果镜像名中没有/,那么此镜像一定是library仓库的镜像; if [ ${n} -eq 0 ]; then img_tag=${imgs} #namespace=rancher #重命名镜像 docker tag ${imgs} ${registry}/${namespace}/${img_tag} #删除原始镜像 #docker rmi ${imgs} #上传镜像 docker push ${registry}/${namespace}/${img_tag} #如果镜像名中有一个/,那么/左侧为项目名,右侧为镜像名和tag elif [ ${n} -eq 1 ]; then img_tag=$(echo ${imgs} | awk -F"/" ‘{print $2}‘) #namespace=$(echo ${imgs} | awk -F"/" ‘{print $1}‘) #重命名镜像 docker tag ${imgs} ${registry}/${namespace}/${img_tag} #删除旧镜像 #docker rmi ${imgs} #上传镜像 docker push ${registry}/${namespace}/${img_tag} #如果镜像名中有两个/, elif [ ${n} -eq 2 ]; then img_tag=$(echo ${imgs} | awk -F"/" ‘{print $3}‘) #namespace=$(echo ${imgs} | awk -F"/" ‘{print $2}‘) #重命名镜像 docker tag ${imgs} ${registry}/${namespace}/${img_tag} #删除旧镜像 #docker rmi ${imgs} #上传镜像 docker push ${registry}/${namespace}/${img_tag} else #标准镜像为四层结构,即:仓库地址/项目名/镜像名:tag,如不符合此标准,即为非有效镜像。 echo "No available images" fi done } docker_push
1、安装
yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce -y systemctl start docker systemctl enable docker systemctl status docker
2、配置
#新建文件夹
mkdir -p /etc/docker cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://z34wtdhg.mirror.aliyuncs.com"], "insecure-registries":["harbor.httpshop.com","bh-harbor.suixingpay.com"], "storage-driver": "overlay2", "storage-opts": ["overlay2.override_kernel_check=true"] } { "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } } EOF
#重启 systemctl daemon-reload systemctl restart docker
1、在可用访问Internet的主机中,使用rancher-save-images.sh和 rancher-images.txt创建所有所需镜像的压缩包;
chmod +x rancher-save-images.sh
./rancher-save-images.sh --image-list /opt/rancher/deploy/rancher-images.txt
会在当前目录rancher-images-$(date +"%Y-%m-%d") 生成所有镜像的压缩文件。
2、拷贝所有文件到内网环境中的Linux主机上,然后执行以下脚本去加载压缩包。如果上一步下载镜像的主机可以连接内网的镜像仓库,那么此步骤可以跳过。
chmod +x rancher-load-images.sh ./rancher-load-images.sh --images-path /opt/rancher/deploy/rancher-images-$(date +"%Y-%m-%d")
3、使用rancher-push-images.sh把导入的docker镜像自动tag重命名,然后上传到私有镜像仓库。镜像默认全部上传到镜像仓库的rancher项目下,如果镜像仓库不支持自动创建项目名(比如Harbor),需要提前手动去镜像仓库创建好项目。执行脚本后会要求输入镜像仓库地址和用户名、用户密码。
chmod +x rancher-push-images.sh ./rancher-push-images.sh reg.nexus.wmqe.com admin *******
使用下面的示例创建rancher-cluster.yml文件,使用创建的3个节点的IP地址或域名替换列表中的IP地址。
cd /opt/rancher/deploy
vim rancher-cluster.yml
nodes: - address: 172.16.3.241 user: rancher role: [ "controlplane", "etcd", "worker" ] ssh_key_path: ~/.ssh/id_rsa - address: 172.16.3.242 user: rancher role: [ "controlplane", "etcd", "worker" ] ssh_key_path: ~/.ssh/id_rsa - address: 172.16.3.243 user: rancher role: [ "controlplane", "etcd", "worker" ] ssh_key_path: ~/.ssh/id_rsa private_registries: - url: reg.nexus.wmqe.com user: admin password: "******" is_default: true services: etcd: backup_config: enabled: true interval_hours: 1 retention: 30
常规RKE节点选项:
address yes 公共域名或IP地址
user yes 可以运行docker命令的用户
role yes 分配给节点的Kubernetes角色列表
internal_address no 内部集群通信的私有域名或IP地址
ssh_key_path no 用于对节点进行身份验证的SSH私钥的路径(默认为~/.ssh/id_rsa)
1、创建rancher账号并加入docker组(三台都执行)
useradd rancher -G docker
#设置密码
passwd rancher
#重启生效
reboot
2、root账户可登入(三台都执行)
vim /etc/ssh/sshd_config
PasswordAuthentication yes
systemctl restart sshd
3、root账户免登入(rke安装的节点执行)
ssh-keygen -t rsa ssh-copy-id rancher@172.16.3.241 ssh-copy-id rancher@172.16.3.242 ssh-copy-id rancher@172.16.3.243
1、运行RKE命令创建Kubernetes集群
cd /opt/rancher/deploy/
rke up --config ./rancher-cluster.yml
完成后,显示:Finished building Kubernetes cluster successfully。
从rke v0.2.0开始,当rke 创建集群后,会在配置文件当前目录下生成xxxx.rkestate文件,文件中保存了集群的配置信息和各组件使用的证书信息。
#报错:FATA[0075] [etcd] Failed to bring up Etcd Plane: [etcd] Etcd Cluster is not healthy
#参考:https://www.gitmemory.com/issue/rancher/rke/1244/478974206
2、如果创建失败一定要清理缓存再继续
rm -rf /var/lib/rancher/etcd/* rm -rf /etc/kubernetes/* rke remove --config ./rancher-cluster.yml
参考:http://www.zhangrenhua.com/2019/01/09/Rancher2.1%20HA%E9%83%A8%E7%BD%B2k8s/
1、检查节点状态
创建完成后,RKE会创建了一个文件kube_config_rancher-cluster.yml。通过kubectl测试您的连接,并查看您的所有节点是否处于Ready状态。
kubectl --kubeconfig=kube_config_rancher-cluster.yml get nodes NAME STATUS ROLES AGE VERSION 172.16.3.241 Ready controlplane,etcd,worker 33m v1.13.5 172.16.3.242 Ready controlplane,etcd,worker 33m v1.13.5 172.16.3.243 Ready controlplane,etcd,worker 33m v1.13.5
执行完后会生成 $HOME/.kube/ 目录。
2、复制config文件
kube_config_rancher-cluster.yml 这个文件包含 kubectl 和 helm 访问 K8S 的凭据。可以将此文件复制到 $HOME/.kube/config,后续就不用指定配置文件执行 kubectl 命令
cp kube_config_rancher-cluster.yml /root/.kube/config
#或者如果正在使用多个Kubernetes集群,请将KUBECONFIG环境变量设置为kube_config_rancher-cluster.yml文件路径。
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
3、检查Pod状态
kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx default-http-backend-7dd5cb66c4-qdr4g 1/1 Running 1 31m ingress-nginx nginx-ingress-controller-h46wq 1/1 Running 1 31m ingress-nginx nginx-ingress-controller-kshvs 1/1 Running 1 31m ingress-nginx nginx-ingress-controller-p8tw7 1/1 Running 1 31m kube-system canal-5pgj4 2/2 Running 2 31m kube-system canal-hgl58 2/2 Running 2 31m kube-system canal-lz7v7 2/2 Running 2 31m kube-system kube-dns-autoscaler-bdb58979-jgqx8 1/1 Running 1 31m kube-system kube-dns-b9c8976b8-95849 3/3 Running 12 31m kube-system metrics-server-75656f5b94-zm5j2 1/1 Running 2 31m kube-system rke-ingress-controller-deploy-job-nnr6n 0/1 Completed 0 31m kube-system rke-kubedns-addon-deploy-job-9vzxv 0/1 Completed 0 31m kube-system rke-metrics-addon-deploy-job-qwkpc 0/1 Completed 0 31m kube-system rke-network-plugin-deploy-job-lck7b 0/1 Completed 0 31m
#如果有 pod 启动失败,用 kubectl describe 命令查看启动日志,如果是镜像不存在问题,需再执行3.3小节进行镜像同步。
4、保存配置文件
保存 kube_config_rancher-cluster.yml 和 rancher-cluster.yml 文件的副本,您将需要这些文件来维护和升级 Rancher 实例。
Helm在Kubernetes集群上安装Tiller服务以管理charts,由于RKE默认启用RBAC,因此我们需要使用kubectl来创建一个serviceaccount,clusterrolebinding才能让Tiller具有部署到集群的权限。
在离线环境中安装有kubectl的主机上执行以下命令:
kubectl -n kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
#附:如果是多集群需指定kubeconfig配置文件
kubeconfig=/root/.kube/config kubectl --kubeconfig=$kubeconfig -n kube-system create serviceaccount tiller kubectl --kubeconfig=$kubeconfig create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
1、先获取helm的版本(忽略没有安装tiller的报错)
helm version |grep Client | awk -F""\" ‘{print $2}‘
Error: could not find tiller v2.14.1
2、chart仓库上传到私有仓库(若已上传可忽略)
1)把原来的rancher-images.txt文件备份,新建新的rancher-images.txt文件,内容如下(版本号即为之前查到的):
registry.cn-shanghai.aliyuncs.com/rancher/tiller:v2.14.1
2)下载镜像
./rancher-save-images.sh --image-list /op/rancher/deploy/rancher-images.txt
3)同步镜像到私有仓库
./rancher-push-images.sh
reg.nexus.wmqe.com
admin
******
3、安装tiller
helm init --skip-refresh --service-account tiller --tiller-image reg.nexus.wmqe.com/rancher/tiller:v2.14.1
注意:
1、helm init在缺省配置下,会去谷歌镜像仓库拉取gcr.io/kubernetes-helm/tiller镜像,并在Kubernetes集群上安装配置Tiller。离线环境下,可通过--tiller-image指定私有镜像仓库镜像。
2、helm init在缺省配置下,会利用https://kubernetes-charts.storage.googleapis.com作为缺省的stable repository地址,并去更新相关索引文件。
3、如果是离线安装Tiller, 如果有内部的chart仓库,可通过--stable-repo-url指定内部chart地址;如果没有内部的chart仓库, 可通过添加--skip-refresh参数禁止Tiller更新索引。
#参考范例:在离线环境中安装有kubectl和Helm客户端的主机上执行以下命令
kubeconfig=xxx.yaml helm_version=`helm version |grep Client | awk -F""\" ‘{print $2}‘` helm init --kubeconfig=$kubeconfig --skip-refresh --service-account tiller --tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:${helm_version}
此步骤需要在能连接互联网的主机上操作,在可访问互联网并安装有Helm客户端的主机上执行以下操作。
1、添加Rancher Charts仓库
指定安装的版本(比如: latest or stable)
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
2、获取Rancher Charts离线包
可查看Rancher Charts仓库中Helm Chart的版本
helm search rancher
NAME CHART VERSION APP VERSION DESCRIPTION rancher-stable/rancher 2.2.4 v2.2.4 Install Rancher Server to manage Kubernetes clusters acro...
获取离线包
helm fetch rancher-stable/rancher --version v2.2.4
结果:默认在当前目录下生成rancher-vx.x.x.tgz压缩文件,可通过-d指定生成的压缩包路径,比如:helm fetch rancher-stable/rancher --version v2.2.4 -d /home,将会在/home目录下生成rancher-vx.x.x.tgz压缩文件。
将生成的rancher-vx.x.x.tgz文件拷贝到离线环境安装有kubectl和Helm客户端的主机上,解压rancher-vx.x.x.tgz文件获得rancher文件夹。
tar -zxvf rancher-2.2.4.tgz
在阿里云上新建内网的4层负载均衡器,生成一个IP:172.16.3.244,对这个IP进行域名A记录
rancher.wmqe.com 172.16.3.244
1、下载权威证书
将服务证书和CA中间证书链合并名为tls.crt的文件中,将私钥复制到名为tls.key的文件中。
mkdir /opt/rancher/ca_tls/
2、创建命名空间及secrets
#创建命名空间
kubectl create namespace cattle-system
#使用kubectl创建类型为tls的secrets。
kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=/opt/rancher/ca_tls/tls.crt --key=/opt/rancher/ca_tls/tls.key
注意:必须把服务证书文件和 key 文件重命名为 tls.crt 和 tls.key。
3、安装rancher
然后执行以下命令进行rancher安装,指定之前根据Rancher Charts仓库下载的rancher文件,不用再指定版本号。
#新建审计日志目录(所有主机执行)
mkdir /opt/rancher/auditlogs/
#安装(在安装helm主机上执行)
cd /opt/rancher/deploy/
helm install ./rancher --name rancher --namespace cattle-system --set hostname=rancher.wmqe.com --set ingress.tls.source=secret --set auditLog.level=3 --set auditLog.destination=hostPath --set auditLog.hostPath=/opt/rancher/auditlogs/ --set auditLog.maxAge=20 --set auditLog.maxBackups=20 --set auditLog.maxSize=100 --set rancherImage=reg.nexus.wmqe.com/rancher/rancher
注意:=号后面不能有空格。
Chart高级选项参考:
https://rancher.com/docs/rancher/v2.x/en/installation/ha/helm-rancher/chart-options/#api-audit-log
如果使用的是自己创建的自签名证书,则需要创建证书secret和CA证书secret。
1、生成自签名证书脚本
一键生成ssl自签名证书脚本:https://www.cnrancher.com/docs/rancher/v2.x/cn/install-prepare/self-signed-ssl/
cd cd /opt/rancher/
mkdir ca_tls && cd ca_tls
vim create_self-signed-cert.sh #!/bin/bash -e help () { echo ‘ ================================================================ ‘ echo ‘ --ssl-domain: 生成ssl证书需要的主域名,如不指定则默认为localhost,如果是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-date: ssl有效期,默认10年;‘ echo ‘ --ca-date: ca有效期,默认10年;‘ 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=localhost # ssl相关配置 SSL_CONFIG=${SSL_CONFIG:-$PWD/openssl.cnf} SSL_DOMAIN=${SSL_DOMAIN:-localhost} 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 "\033[32m ---------------------------- \033[0m" echo -e "\033[32m | 生成 SSL Cert | \033[0m" echo -e "\033[32m ---------------------------- \033[0m" if [[ -e ./${CA_KEY} ]]; then echo -e "\033[32m ====> 1. 发现已存在CA私钥,备份"${CA_KEY}"为"${CA_KEY}"-bak,然后重新创建 \033[0m" mv ${CA_KEY} "${CA_KEY}"-bak openssl genrsa -out ${CA_KEY} ${SSL_SIZE} else echo -e "\033[32m ====> 1. 生成新的CA私钥 ${CA_KEY} \033[0m" openssl genrsa -out ${CA_KEY} ${SSL_SIZE} fi if [[ -e ./${CA_CERT} ]]; then echo -e "\033[32m ====> 2. 发现已存在CA证书,先备份"${CA_CERT}"为"${CA_CERT}"-bak,然后重新创建 \033[0m" mv ${CA_CERT} "${CA_CERT}"-bak openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}" else echo -e "\033[32m ====> 2. 生成新的CA证书 ${CA_CERT} \033[0m" openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}" fi echo -e "\033[32m ====> 3. 生成Openssl配置文件 ${SSL_CONFIG} \033[0m" cat > ${SSL_CONFIG} <<EOM [req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth, serverAuth EOM if [[ -n ${SSL_TRUSTED_IP} || -n ${SSL_TRUSTED_DOMAIN} ]]; then cat >> ${SSL_CONFIG} <<EOM subjectAltName = @alt_names [alt_names] EOM IFS="," dns=(${SSL_TRUSTED_DOMAIN}) dns+=(${SSL_DOMAIN}) for i in "${!dns[@]}"; do echo DNS.$((i+1)) = ${dns[$i]} >> ${SSL_CONFIG} done if [[ -n ${SSL_TRUSTED_IP} ]]; then ip=(${SSL_TRUSTED_IP}) for i in "${!ip[@]}"; do echo IP.$((i+1)) = ${ip[$i]} >> ${SSL_CONFIG} done fi fi echo -e "\033[32m ====> 4. 生成服务SSL KEY ${SSL_KEY} \033[0m" openssl genrsa -out ${SSL_KEY} ${SSL_SIZE} echo -e "\033[32m ====> 5. 生成服务SSL CSR ${SSL_CSR} \033[0m" openssl req -sha256 -new -key ${SSL_KEY} -out ${SSL_CSR} -subj "/C=${CN}/CN=${SSL_DOMAIN}" -config ${SSL_CONFIG} echo -e "\033[32m ====> 6. 生成服务SSL CERT ${SSL_CERT} \033[0m" openssl x509 -sha256 -req -in ${SSL_CSR} -CA ${CA_CERT} -CAkey ${CA_KEY} -CAcreateserial -out ${SSL_CERT} -days ${SSL_DATE} -extensions v3_req -extfile ${SSL_CONFIG} echo -e "\033[32m ====> 7. 证书制作完成 \033[0m" echo echo -e "\033[32m ====> 8. 以YAML格式输出结果 \033[0m" echo "----------------------------------------------------------" echo "ca_key: |" cat $CA_KEY | sed ‘s/^/ /‘ echo echo "ca_cert: |" cat $CA_CERT | sed ‘s/^/ /‘ echo echo "ssl_key: |" cat $SSL_KEY | sed ‘s/^/ /‘ echo echo "ssl_csr: |" cat $SSL_CSR | sed ‘s/^/ /‘ echo echo "ssl_cert: |" cat $SSL_CERT | sed ‘s/^/ /‘ echo echo -e "\033[32m ====> 9. 附加CA证书到Cert文件 \033[0m" cat ${CA_CERT} >> ${SSL_CERT} echo "ssl_cert: |" cat $SSL_CERT | sed ‘s/^/ /‘ echo echo -e "\033[32m ====> 10. 重命名服务证书 \033[0m" echo "cp ${SSL_DOMAIN}.key tls.key" cp ${SSL_DOMAIN}.key tls.key echo "cp ${SSL_DOMAIN}.crt tls.crt" cp ${SSL_DOMAIN}.crt tls.crt
#脚本说明
--ssl-domain: 生成ssl证书需要的主域名,如不指定则默认为localhost,如果是ip访问服务,则可忽略;
--ssl-trusted-ip: 一般ssl证书只信任域名的访问请求,有时候需要使用ip去访问server,那么需要给ssl证书添加扩展IP,多个IP用逗号隔开;
--ssl-trusted-domain: 如果想多个域名访问,则添加扩展域名(TRUSTED_DOMAIN),多个TRUSTED_DOMAIN用逗号隔开;
--ssl-size: ssl加密位数,默认2048;
--ssl-date: ssl有效期,默认10年;
--ca-date: ca有效期,默认10年;
--ssl-cn: 国家代码(2个字母的代号),默认CN;
2、生成证书
chmod +x create_self-signed-cert.sh ./create_self-signed-cert.sh --ssl-domain=rancher.wmqhealth.com --ssl-trusted-ip=172.16.3.241,172.16.3.242,172.16.3.243 --ssl-size=2048 --ssl-date=3650
3、创建命名空间及secrets
kubectl create namespace cattle-system kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=/opt/rancher/ca_tls/tls.crt --key=/opt/rancher/ca_tls/tls.key kubectl -n cattle-system create secret generic tls-ca --from-file=/opt/rancher/ca_tls/cacerts.pem
注意:必须保证文件名为cacerts.pem、tls.crt和tls.key。
4、安装rancher
cd /opt/rancher/deploy/ helm install ./rancher --name rancher --namespace cattle-system --set hostname=rancher.wmqe.com --set ingress.tls.source=secret --set privateCA=true --set auditLog.level=1 --set rancherImage=reg.nexus.wmqe.com/rancher/rancher
安装成功会提示:Happy Containering!
不用指定版本stable,因为指定了Charts模板目录,自动会安装对应的版本的rancher。
#卸载方法
helm del --purge rancher
helm del --purge cattle-node
1、查看pod运行情况
kubectl get pod -o wide -A NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES cattle-system rancher-89444f57b-2nkvz 1/1 Running 0 42s 10.42.0.8 172.16.3.241 <none> <none> cattle-system rancher-89444f57b-q4lsq 1/1 Running 0 42s 10.42.1.5 172.16.3.243 <none> <none> cattle-system rancher-89444f57b-ztcrh 1/1 Running 0 42s 10.42.2.7 172.16.3.242 <none> <none>
2、访问rancher
需要在设置好负载均衡,并做域名解析。
admin,******
1、准备离线镜像:按照准备离线镜像方法, 同步新版本镜像到离线镜像仓库。
2、备份集群:创建快照 如果在升级期间出现问题,可使用此快照进行恢复。
3、kubectl:安装配置kubectl,使其可以连接集群。
4、安装或者升级Helm Server和Helm 客户端
如果之前是通过RKE部署的rancher,那首先需要安装Helm Server和Helm 客户端,安装方法参考安装Helm Server和Helm 客户端安装最新版本Helm Server和Helm 客户端
注意:以下操作需要在安装有helm和kubectl工具并且可以访问互联网的主机上操作
1、更新本地helm repo缓存。
helm repo update
2、查看本地helm repo.
3、获取Rancher Charts离线包。
参考4.2小节
拷贝rancher-vx.x.x.tgz文件到离线环境中安装有helm客户端和kubectl客户端并可以访问内网集群的主机上,解压rancher-vx.x.x.tgz得到rancher文件夹。
注意:升级参数应该以安装时设置的参数为准,将安装参数以--set key=value的形式附加到升级命令中。
helm install ./rancher --set hostname=rancher.wmqhealth.com --set ingress.tls.source=secret --set auditLog.level=3 --set auditLog.destination=hostPath --set auditLog.hostPath=/opt/rancher/auditlogs/ --set auditLog.maxAge=20 --set auditLog.maxBackups=20 --set auditLog.maxSize=100 --set rancherImage=reg.nexus.wmqhealth.com/rancher/rancher
etcd的备份在之前部署kubernetes的时候已经指定了备份间隔和保留天数
services: etcd: backup_config: enabled: true interval_hours: 1 retention: 30
#参数说明:
interval_hours: 1 每隔一个小时进行备份,不支持单位和小数
retention: 30 清理30天之前的备份数据
#如果修改这两个参数后,直接重新部署一次即可
rke up --config ./rancher-cluster.yml
注意:会重启kube-apiserver、kube-scheduler、kube-controller-manager、etcd-rolling-snapshots四个容器。不影响rancher集群的运行。自动备份会在每个etcd节点上的 /opt/rke/etcd-snapshots 目录生成备份文件,只需定时复制一份到远程存储中。
从rke v0.2.0开始,当rke 创建集群后,会在配置文件当前目录下生成xxxx.rkestate文件,文件中保存了集群的配置信息和各组件使用的证书信息。
cd /opt/rancher/deploy
rke etcd snapshot-save --name etcd_back_0612_1743 --config rancher-cluster.yml
把生成的备份文件,rancher-cluster.yml,rancher-cluster.rkestate进行备份到远程存储中。
标签:当前目录 min ini extend util docker-ce creat happy fstab
原文地址:https://www.cnblogs.com/weavepub/p/11053099.html