RKE高可用安装K8s集群
本次安装演示是在本地虚拟机完成,下面所有IP地址请替换成自己本机配置地址;
若使用云服务器请保证各服务器同属同一个内网,请将下面地址替换成自己服务器内网地址,
并设置一下RKE所需端口入站出站规则(参照:https://rancher2.docs.rancher.cn/docs/installation/requirements/ports/_index)
我们准备了四台服务器,k8s-nginx
(负载均衡器)、k8s-node01
(节点1)、k8s-node02
(节点2)、k8s-node03
(节点3)
我们设置每个node节点都作为master节点和node节点使用,当然土豪的话可以配置三个master节点和三个node节点的
hostnamectl set-hostname k8s-nginx hostnamectl set-hostname k8s-node01 hostnamectl set-hostname k8s-node02 hostnamectl set-hostname k8s-node03
hostname
vi /etc/hosts 192.168.66.14 k8s-nginx 192.168.66.10 k8s-node01 192.168.66.11 k8s-node02 192.168.66.12 k8s-node03
systemctl stop firewalld && systemctl disable firewalld
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
#关闭selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
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
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 vm.swappiness=0 EOF sysctl --system
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2
#配置docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum update -y && yum install docker-ce
#创建/etc/docker目录
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF {"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"registry-mirrors": ["https://<your Id>.mirror.aliyuncs.com",https://mirror.ccs.tencentyun.com/"]} EOF
#注意: 一定注意编码问题,出现错误:查看命令:journalctl -amu docker 即可发现错误
#your Id替换为你的id,阿里加速镜像需要登录自己容器镜像服务查询:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/systemd/system/docker.service.d
#重启docker服务
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
useradd ubuntu passwd ubuntu usermod -aG docker ubuntu
vi /etc/sudoers
找到这一行:“root ALL=(ALL) ALL”,在下面添加:
ubuntu ALL=(ALL) ALL
#1、ssh配置
su - ubuntu
ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.68.10 ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.68.11 ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.68.12 ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.68.14
#免密测试
ssh 用户名@机器IP
创建/etc/nginx/nginx.conf:
worker_processes 4; worker_rlimit_nofile 40000; events { worker_connections 8192; } stream { upstream rancher_servers_http { least_conn; server 192.168.68.10:80 max_fails=3 fail_timeout=5s; server 192.168.68.11:80 max_fails=3 fail_timeout=5s; server 192.168.68.12:80 max_fails=3 fail_timeout=5s; } server { listen 80; proxy_pass rancher_servers_http; } upstream rancher_servers_https { least_conn; server 192.168.68.10:443 max_fails=3 fail_timeout=5s; server 192.168.68.11:443 max_fails=3 fail_timeout=5s; server 192.168.68.12:443 max_fails=3 fail_timeout=5s; } server { listen 443; proxy_pass rancher_servers_https; } }
#3.拉取nginx镜像
docker pull nginx:1.15
#4.运行nginx镜像
docker run -d --restart=always -p 80:80 -p 443:443 \ --name nginx \ -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf \ nginx:1.15
#下载地址:
https://github.com/rancher/rke/releases/download/v1.0.10/rke_linux-amd64
#github下载较慢,我已上传安装包至百度网盘:
(链接:https://pan.baidu.com/s/1RU_XoTtrsnK-nQTggVU_AQ 提取码:caqk )
2.创建rancher-cluster.yml文件
nodes: - address: 192.168.68.10 internal_address: 192.168.68.10 user: ubuntu role: [controlplane, worker, etcd] - address: 192.168.68.11 internal_address: 192.168.68.11 user: ubuntu role: [controlplane, worker, etcd] - address: 192.168.68.12 internal_address: 192.168.68.12 user: ubuntu role: [controlplane, worker, etcd] services: etcd: snapshot: true creation: 6h retention: 24h
#当使用外部 TLS 终止,并且使用 ingress-nginx v0.22或以上版本时,必须。
ingress: provider: nginx options: use-forwarded-headers: "true"
#.执行安装
mv rke_linux-amd64 rke rke up --config ./rancher-cluster.yml
直至出现:
Finished building Kubernetes cluster successfully
安装完成
提示:若安装失败或者镜像(images)pull失败,那可能是docker镜像加速地址未配置成功,请重新配置/etc/docker/daemon.json文件并重启
然后再执行rke up --config ./rancher-cluster.yml
(可多次执行,不影响),直至成功为止
#设置KUBECONFIG环境变量(这步可跳跃)
export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
$(pwd):请替换成kube_config_rancher-cluster.yml文件所在目录
#将kube_config_rancher-cluster.yml文件复制到$HOME/.kube/config
touch ~/.kube/config cp -a ./kube_config_rancher-cluster.yml ~/.kube/config
#安装kubectl
yum install -y kubectl-1.18.0
#使用kubectl测试您的连通性,并查看您的所有节点是否都处于Ready状态:
kubectl get nodes
#打印
NAME STATUS ROLES AGE VERSION 192.168.68.10 Ready controlplane,etcd,worker 2d17h v1.17.6 192.168.68.11 Ready controlplane,etcd,worker 2d17h v1.17.6 192.168.68.12 Ready controlplane,etcd,worker 2d17h v1.17.6
#检查集群 Pod 的运行状况
检查所有必需的 Pod 和容器是否状况良好,然后可以继续进行。
Pod 是Running或Completed状态。
STATUS 为 Running 的 Pod,READY 应该显示所有容器正在运行 (例如,3/3)。
STATUS 为 Completed的 Pod 是一次运行的作业。对于这些 Pod,READY应为0/1。
执行:
kubectl get pods --all-namespaces
打印:
NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx default-http-backend-67cf578fc4-jpprk 1/1 Running 2 2d17h ingress-nginx nginx-ingress-controller-8dkq5 1/1 Running 2 2d17h ingress-nginx nginx-ingress-controller-8qs9n 1/1 Running 1 2d17h ingress-nginx nginx-ingress-controller-w7wq9 1/1 Running 1 2d17h kube-system canal-bngcs 2/2 Running 2 2d17h kube-system canal-tdn87 2/2 Running 2 2d17h kube-system canal-z9zh7 2/2 Running 2 2d17h kube-system coredns-7c5566588d-95926 1/1 Running 1 2d17h kube-system coredns-7c5566588d-qsgm4 1/1 Running 1 2d17h kube-system coredns-autoscaler-65bfc8d47d-8m9bg 1/1 Running 1 2d17h kube-system metrics-server-6b55c64f86-6mn7c 1/1 Running 1 2d17h kube-system rke-coredns-addon-deploy-job-kw86f 0/1 Completed 0 2d17h kube-system rke-ingress-controller-deploy-job-qk6pw 0/1 Completed 0 2d17h kube-system rke-metrics-addon-deploy-job-rpr48 0/1 Completed 0 2d17h kube-system rke-network-plugin-deploy-job-79nc9 0/1 Completed 0 2d17h
这确认您已经成功安装了可以运行 Rancher Server 的 Kubernetes 集群。
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
或者百度网盘下载:
(链接:https://pan.baidu.com/s/1Ma7aNznrnaEaTe1Ke4cheg 提取码:5oul)
tar -xf helm-v3.2.4-linux-amd64.tar.gz cd helm-v3.2.4-linux-amd64/ cp helm /usr/local/bin/
#2、添加 Helm Chart 仓库
#国外地址
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
#国内地址(推荐)
helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
#3、为 Rancher 创建 Namespace
kubectl create namespace cattle-system
#4、选择您的 SSL 选项
安装 cert-manager
有三种关于证书来源的推荐选项,证书将用来在 Rancher Server 中终止 TLS:
Rancher 生成的自签名证书: 在这种情况下,您需要在集群中安装cert-manager。 Rancher 利用cert-manager签发并维护证书。Rancher 将生成自己的 CA 证书,并使用该 CA 签署证书。然后,cert-manager负责管理该证书。
Let’s Encrypt: Let’s Encrypt 选项也需要使用cert-manager。但是,在这种情况下,cert-manager与特殊的 Issuer 结合使用,cert-manager将执行获取 Let’s Encrypt 发行的证书所需的所有操作(包括申请和验证)。此配置使用 HTTP 验证(HTTP-01),因此负载均衡器必须具有可以从公网访问的公共 DNS 记录。
使用您自己的证书: 此选项使您可以使用自己的权威 CA 颁发的证书或自签名 CA 证书。 Rancher 将使用该证书来保护 WebSocket 和 HTTPS 流量。在这种情况下,您必须上传名称分别为tls.crt和tls.key的 PEM 格式的证书以及相关的密钥。如果使用私有 CA,则还必须上传该证书。这是由于您的节点可能不信任此私有 CA。 Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将使用该校验和来验证其与 Rancher 的连接。
这里我们选择rancher生成的证书:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml
kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v0.15.0
安装完 cert-manager 后,您可以通过检查 cert-manager 命名空间中正在运行的 Pod 来验证它是否已正确部署:
kubectl get pods --namespaces cert-manager cert-manager-766d5c494b-6gtfk 1/1 Running 0 2m58s cert-manager-cainjector-6649bbb695-7fbp4 1/1 Running 0 2m58s cert-manager-webhook-68d464c8b-s4hrj 1/1 Running 0 2m58s
其中镜像cert-manager-webhook-68d464c8b-s4hrj较大,pull需要一段时间,请稍后刷新
#5、根据您选择的 SSL 选项,通过 Helm 安装 Rancher
#因为rancher安装时需要指定一个域名地址,我们可以修改本地主机(不是虚拟机,是本地你的电脑)解析一个自定义域名映射到到ranchar主机中:
修改hosts文件:
1、Windows的hosts的完整路径为:“C:\Windows\System32\drivers\etc\hosts”。如果你看不到,说明你的改路径被隐藏了,在“查看”中勾选“隐藏的项目”。
2、更改权限。在“属性”中的“安全”选项卡中勾选“完全控制”权限,这样hosts修改完保存时就有了操作权限。
3、用记事本打开,在最后一行添加并保存就可以了,域名可以随便定义:
192.168.68.14 www.rancher.k8s.com
开始安装rancher
这里我们选择使用 Rancher 生成的自签名证书安装rancher
helm install rancher rancher-<CHART_REPO>/rancher \ --namespace cattle-system \ --set hostname=www.rancher.k8s.com
其中<CHART_REPO>
替换成上面我们选择的stable版本,www.rancher.k8s.com
是我们一开始为负载均衡器设置的DNS
我们可以看到打印中有:
Browse to https://www.rancher.k8s.com
该地址是我们访问rancher的地址
#我们可以检测rancher是否已安装运行:
执行:
kubectl -n cattle-system rollout status deploy/rancher
打印:
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
出现:
deployment "rancher" successfully rolled out
表示rancher已运行成功
如果看到以下错误: error: deployment "rancher" exceeded its progress deadline
, 您可以通过运行以下命令来检查 deployment 的状态:
kubectl -n cattle-system get deploy rancher
注意:重要,因为我们用的本机解析了rancher需要的域名地址,所有一定要配置下面,当然生成环境,您有公网域名的话就不用
#cattle-cluster-agent配置(因为我们配置的
kubectl -n cattle-system \ patch deployments cattle-cluster-agent --patch '{ "spec": { "template": { "spec": { "hostAliases": [ { "hostnames": [ "www.rancher.k8s.com" ], "ip": "192.168.68.14" } ] } } } }'
#cattle-node-agent pod
kubectl -n cattle-system \ patch daemonsets cattle-node-agent --patch '{ "spec": { "template": { "spec": { "hostAliases": [ { "hostnames": [ "www.rancher.k8s.com" ], "ip": "192.168.68.14" } ] } } } }'
至此,rancher高可用k8s安装完毕,其它使用教程,后续再更新喽!
原文链接:https://blog.csdn.net/qq_28408457/article/details/118358493