本文将介绍,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 vonechain@192.168.65.130
[vonechain@kube0 .ssh]$ ssh-copy-id vonechain@192.168.65.131
[vonechain@kube0 .ssh]$ ssh-copy-id vonechain@192.168.65.129
新建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 <<EOF > /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 letsEncrypt.email=test@qq.com \
--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
网友评论