CentOS7下,RKE部署k8s集群,及Helm Chart 安装Rancher高可用

本文将介绍,CentOS7系统下,通过RKE部署k8s集群,以及通过Helm3.6.3 CLI 在 Kubernetes1.20集群上部署cert-manager和Rancher2.6.3高可用系统。

0. 前置条件

系统版本:
建议使用CentOS7.6,最低7.3以上版本;
Docker版本:
建议Kubernetes1.20,Kubernetes1.8不支持17.03更高版本的Docker;
主机名:
系统一定要修改主机名,确保各个hostname必须不同!
主机文件:
编辑/etc/hosts,要有·127.0.0.1 localhost·及所有主机节点的IP和名称列表。
SELinux:
必须关闭,修改配置文件/etc/sysconfig/selinux,设置SELINUX=disabled ,source立即生效。
IPV4转发:
必须开启,修改配置文件/etc/sysctl.conf,设置启用转发:
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
执行·sysctl -p·立刻生效。
防火墙:
关闭防火墙,执行·systemctl stop firewalld.service && systemctl disable firewalld.service·停止禁用。
禁用SWAP:
一定要禁用swap,否则kubelet组件无法运行,修改/etc/fstab文件,注释掉swap项。
启用Cgroup:
修改配置文件/etc/default/grub,启用cgroup内存限额功能,配置两个参数:
GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
执行·update-grub·更新grub,然后重启系统后生效。
SSH免密登录:
所有节点执行·ssh-keygen·生成秘钥,并通过命令·ssh-copy-id user@节点IP‘分发。

1. RKE部署Kubernetes1.20集群

准备centos7.6主机三台:kube0、kube1、kube2,配置最低为4核4G内存。

[root@kube0 ~]# cat /etc/hosts
192.168.65.129   kube0
192.168.65.130   kube1
192.168.65.131   kube2
127.0.0.1   localhost localhost.localdomain

安装docker,并配置镜像加速:参照CentOS7下安装Docker。

[root@kube0 ~]# docker -v
Docker version 20.10.18, build b40c2f6

安装RKE工具

下载安装包(kube0上执行):

[root@kube0 ~]# wget https://github.com/rancher/rke/releases/download/v1.2.8/rke_linux-amd64
[root@kube0 ~]# mv rke_linux-amd64 /usr/local/bin/rke && chmod +x /usr/local/bin/rke

创建用户(kube0、kube1、kube2上执行):

[root@kube0 ~]# useradd vonechain
[root@kube0 ~]# usermod -a -G docker vonechain

部署Kubernetes1.20集群

创建SSH秘密(kube0、kube1、kube2上执行):

[root@kube0 ~]# su vonechain
[vonechain@kube0 root]$ cd ~
[vonechain@kube0 ~]$ ssh-keygen

输入ssh-keygen按回车键到结束。

分发秘钥到各节点(kube0、kube1、kube2上执行):

[vonechain@kube0 ~]$ cd .ssh
[vonechain@kube0 .ssh]$ ssh-copy-id  [email protected]
[vonechain@kube0 .ssh]$ ssh-copy-id  [email protected]
[vonechain@kube0 .ssh]$ ssh-copy-id  [email protected]

新建k8s.yml文件,编辑Kubernetes1.20集群配置:

[vonechain@kube0 .ssh]$ cd ~
[vonechain@kube0 ~]$ vim k8s.yml
nodes:
  - address: 192.168.65.129
    internal_address: 192.168.65.129
    user: vonechain
    role: [controlplane,worker,etcd]
  - address: 192.168.65.130
    internal_address: 192.168.65.130
    user: vonechain
    role: [controlplane,worker,etcd]
  - address: 192.168.65.131
    internal_address: 192.168.65.131
    user: vonechain
    role: [controlplane,worker,etcd]

kubernetes_version: "v1.20.6-rancher1-1"
cluster_name: "quality-k8s"
services:
    etcd:
      snapshot: true
      creation: 6h
      retention: 24h

执行RKE命令,安装k8s集群(kube0上执行):

[vonechain@kube0 ~]$ rke up --config ./k8s.yml

运行该命令后,返回的最后一行信息应该是Finished building Kubernetes cluster successfully,表示成功部署集群。在k8s.yml同目录,会生成k8s.rkestate集群状态文件和kube_config_k8s.yml集群所有权限的认证凭据文件。

设置k8s环境变量(kube0上执行):

[vonechain@kube0 ~]$ echo "export KUBECONFIG=/root/kube_config_k8s.yml" >> .bashrc
[vonechain@kube0 ~]$ source .bashrc

安装Kubectl(kube0上执行):

[vonechain@kube0 ~]$ cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
[vonechain@kube0 ~]$ setenforce 0
[vonechain@kube0 ~]$ yum install -y kubectl

检查k8s集群(kube0上执行):

[vonechain@kube0 ~]$ kubectl get nodes
NAME             STATUS   ROLES                      AGE     VERSION
192.168.65.129   Ready    controlplane,etcd,worker   7h44m   v1.20.6
192.168.65.130   Ready    controlplane,etcd,worker   7h45m   v1.20.6
192.168.65.131   Ready    controlplane,etcd,worker   7h45m   v1.20.6

Helm3安装Rancher2.6.3高可用

添加 Helm Chart 仓库(kube0上执行):

[vonechain@kube0 ~]$ helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

为 Rancher 创建命名空间(kube0上执行):

[vonechain@kube0 ~]$ kubectl create namespace cattle-system

安装 cert-manager(kube0上执行):

# 安装 CustomResourceDefinition 资源
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
# 添加 Jetstack Helm 仓库
helm repo add jetstack https://charts.jetstack.io
# 更新本地 Helm Chart 仓库缓存
helm repo update
# 安装 cert-manager Helm Chart
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.7.1

检查 cert-manager正在运行的 Pod ,来验证它是否已正确部署(kube0上执行):

[vonechain@kube0 ~]$ kubectl get pods --namespace cert-manager

NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-5c6866597-zw7kh               1/1     Running   0          2m
cert-manager-cainjector-577f6d9fd7-tr77l   1/1     Running   0          2m
cert-manager-webhook-787858fcdb-nlzsq      1/1     Running   0          2m

Let's Encrypt证书安装 Rancher(kube0上执行):

[vonechain@kube0 ~]$ helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.quality.icos \
  --set bootstrapPassword=admin \
  --set ingress.tls.source=letsEncrypt \
  --set [email protected] \
  --set replicas=1 \
  --set letsEncrypt.ingress.class=nginx

设置初始登录密码为admin,以单replicas运行rancher,若资源充足可设置为3。

等待rancher安装完成,执行状态检查(kube0上执行):

[vonechain@kube0 ~]$ kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 1 updated replicas are available...
deployment "rancher" successfully rolled out

输出deployment "rancher" successfully表示成功。
配置Windows10本地hosts文件,添加dns解析192.168.65.129 rancher.quality.icos项.


打开浏览器,通过:http://rancher.quality.icos访问rancher主页,登录密码为admin

附:异常解决

如果rancher安装完成,执行状态检查看到 error: deployment "rancher" exceeded its progress deadline 这个错误,可尝试重启pod来解决。

[vonechain@kube0 ~]$ kubectl get pods -n cattle-system 
NAME                               READY   STATUS    RESTARTS   AGE
rancher-565c54d544-9vbtt           0/1     Running   6          166m
[vonechain@kube0 ~]$ kubectl get pod rancher-565c54d544-9vbtt -n cattle-system -o yaml | kubectl replace --force -f -

重启pod后,重新执行状态检查(kube0上执行):

[vonechain@kube0 ~]$ kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 1 updated replicas are available...
deployment "rancher" successfully rolled out

你可能感兴趣的:(CentOS7下,RKE部署k8s集群,及Helm Chart 安装Rancher高可用)