RKE安装部署K8S集群、Rancher
服務器準備:三臺虛擬機(master:1,node:2;這里選用的阿里云ECS)
| OS | hostname | 內網IP |
| Centos7 | joker-master-1 | 172.27.31.149 |
| Centos7 | joker-node-1 | 172.27.31.148 |
| Centos7 | joker-node-2 | 172.27.31.147 |
首先所有節點初始化系統相關配置
# 關閉防火墻 systemctl stop firewalld systemctl disable firewalld# 關閉selinux sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 setenforce 0 # 臨時# 關閉swap swapoff -a # 臨時 sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久# 根據規劃設置主機名 hostnamectl set-hostname <hostname># 修改 hosts 配置(可以只修改 master,或者所有節點) cat >> /etc/hosts << EOF 172.27.31.149 joker-master-1 172.27.31.148 joker-node-1 172.27.31.147 joker-node-2 EOF# 將橋接的IPv4流量傳遞到iptables的鏈 cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system # 生效# 時間同步 yum install -y ntpdate ntpdate time.windows.com所有節點安裝docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum -y install docker-ce-18.06.1.ce-3.el7systemctl enable docker && systemctl start docker# 配置 docker 鏡像加速 cat > /etc/docker/daemon.json << EOF {"registry-mirrors": ["you docker mirror acceleration address"] } EOF所有節點安裝 Kubctl
# 配置阿里云 Kubernetes yum 軟件源 cat > /etc/yum.repos.d/kubernetes.repo << EOF [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 EOFyum install -y kubectl-1.20.15所有節點 SSH Server 配置
vim /etc/ssh/sshd_config# 允許 TCP 轉發 AllowTcpForwarding yes# 重啟 sshd 服務 systemctl restart sshd.service所有節點開放端口KubeAPI:6443?和etcd:2379
為所有節點創建用戶,并設置 ssh 免密登錄
1.創建用戶
# 創建用戶: rke useradd rke# 設置用戶密碼 passwd rke# 將用戶添加到 docker 組中 usermod -aG docker rke# 登錄新創建的用戶 rke,測試 docker 權限 su rke docker ps # 出現下面這段代碼說明配置成功 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2. 配置 ssh 免密登錄(使用新創建的用戶進行配置)
# 生成 ssh 秘鑰 ssh-keygen -t rsa# 配置免密登錄 ssh-copy-id rke@172.27.31.149 ssh-copy-id rke@172.27.31.148 ssh-copy-id rke@172.27.31.147登錄驗證
?安裝 RKE 二進制包
wget https://github.com/rancher/rke/releases/download/v1.3.7/rke_linux-amd64 # 將下載好的 rke 二進制包移動到 /usr/bin 目錄下,并賦予權限# 如果當前登錄用戶非 root 帳號,切換到 root su root# 移動 rke 二進制包 mv rke_linux-amd64 /usr/bin/rke# 文件授權 chmod +x /usr/bin/rke驗證版本
rke --version?
K8S部署文件有兩種生成方式(使用創建的用戶操作)
1.使用rke生成配置文件
rke config --name cluster.yml[+] Cluster Level SSH Private Key Path [~/.ssh/id_rsa]: # ssh 秘鑰保存路徑 [+] Number of Hosts [1]: # 配置主機數 [+] SSH Address of host (1) [none]: # 第一臺主機 SSH 地址 [+] SSH Port of host (1) [22]: # 第一臺主機 SSH 端口號 [+] SSH Private Key Path of host (139.196.77.13) [none]: /home/rke/.ssh/id_rsa # 第一臺主機 SSH 秘鑰路徑 [+] SSH User of host (139.196.77.13) [ubuntu]: rke # 第一臺主機用戶(就是我們上面創建的用戶) [+] Is host (139.196.77.13) a Control Plane host (y/n)? [y]: y # 參考 Rancher 官方文檔 [+] Is host (139.196.77.13) a Worker host (y/n)? [n]: y # 參考 Rancher 官方文檔 [+] Is host (139.196.77.13) an etcd host (y/n)? [n]: y # 參考 Rancher 官方文檔 [+] Override Hostname of host (139.196.77.13) [none]: joker-master-1 # 第一臺主機 hostname [+] Internal IP of host (139.196.77.13) [none]: 172.27.31.149 # 第一臺主機內網地址 [+] Docker socket path on host (139.196.77.13) [/var/run/docker.sock]: [+] SSH Address of host (2) [none]: # 第二臺主機 SSH 地址 [+] SSH Port of host (2) [22]: [+] SSH Private Key Path of host (106.14.156.233) [none]: /home/rke/.ssh/id_rsa [+] SSH User of host (106.14.156.233) [ubuntu]: rke [+] Is host (106.14.156.233) a Control Plane host (y/n)? [y]: n [+] Is host (106.14.156.233) a Worker host (y/n)? [n]: y [+] Is host (106.14.156.233) an etcd host (y/n)? [n]: y [+] Override Hostname of host (106.14.156.233) [none]: joker-node-1 [+] Internal IP of host (106.14.156.233) [none]: 172.27.31.148 [+] Docker socket path on host (106.14.156.233) [/var/run/docker.sock]: [+] SSH Address of host (3) [none]: # 第三臺主機 SSH 地址 [+] SSH Port of host (3) [22]: [+] SSH Private Key Path of host (106.14.199.170) [none]: /home/rke/.ssh/id_rsa [+] SSH User of host (106.14.199.170) [ubuntu]: rke [+] Is host (106.14.199.170) a Control Plane host (y/n)? [y]: n [+] Is host (106.14.199.170) a Worker host (y/n)? [n]: y [+] Is host (106.14.199.170) an etcd host (y/n)? [n]: y [+] Override Hostname of host (106.14.199.170) [none]: joker-node-2 [+] Internal IP of host (106.14.199.170) [none]: 172.27.31.147 [+] Docker socket path on host (106.14.199.170) [/var/run/docker.sock]: [+] Network Plugin Type (flannel, calico, weave, canal, aci) [canal]: flannel # 網絡組件 [+] Authentication Strategy [x509]: [+] Authorization Mode (rbac, none) [rbac]: [+] Kubernetes Docker image [rancher/hyperkube:v1.22.6-rancher1]: rancher/hyperkube:v1.20.15-rancher1 # k8s 鏡像版本,參考 RKE 官方文檔 [+] Cluster domain [cluster.local]: [+] Service Cluster IP Range [10.43.0.0/16]: [+] Enable PodSecurityPolicy [n]: [+] Cluster Network CIDR [10.42.0.0/16]: [+] Cluster DNS Service IP [10.43.0.10]: [+] Add addon manifest URLs or YAML files [no]:這樣就會在當前文件夾下生成一個 cluster.yml 文件
2. 手動編寫一個 cluster.yml 文件,參考文檔:Kubernetes 配置選項 | Rancher文檔
安裝部署 K8S 集群
rke up --config cluster.yml這個要耐心等待一會兒。因為需要下載許多鏡像。
如果出現如下錯誤
說明所有服務器之間 SSH 免密登錄沒有配置好。如果 SSH 免密登錄沒有問題,則檢查 cluster.yml 文件中每個 node 下的 user 配置是否有問題。
?當出現如下信息,則證明集群已部署完成。
安裝結束后,會生成兩份文件?
- cluster.yml:RKE 集群的配置文件(我們手動生成的配置文件)。
- kube_config_cluster.yml:該集群的Kubeconfig 文件包含了獲取該集群所有權限的認證憑據。
- cluster.rkestate:Kubernetes 集群狀態文件,包含了獲取該集群所有權限的認證憑據,使用 RKE v0.2.0 時才會創建這個文件。
使用?kube_config_cluster.yml文件查看集群狀態
?至此,K8S集群就已經搭建完成。
參考文檔:使用 RKE 安裝 Kubernetes | Rancher文檔
部署 Rancher(可以使用root用戶進行操作)
1.安裝 helm
# 下載 helm 二進制包 wget https://get.helm.sh/helm-v3.5.0-linux-amd64.tar.gz# 解壓 tar -zxvf helm-v3.5.0-linux-amd64.tar.gz# 這一步需要 root 用戶操作,否則可能會有權限不足的問題 mv linux-amd64/helm /usr/bin2.為 Rancher 創建 Namespace
kubectl create namespace cattle-system如果出現
?說明 kubectl 沒有找到相關的配置。還記得上面生成的?kube_config_cluster.yml 文件么?你可以在命令中間添加 --kubeconfig 指定?kube_config_cluster.yml 文件路徑來執行。
kubectl --kubeconfig /home/rke/kube_config_cluster.yml apply -f cert-manager.crds.yaml也可以將?kube_config_cluster.yml 文件添加到系統變量中
echo export KUBECONFIG=/home/rke/kube_config_cluster.yml >> ~/.bash_profilesource ~/.bash_profile?這樣 kubectl 就不需要在指定 --kubeconfig 文件了
?3.選擇 SSL 選項(這里選用 Rancher 生成的 TLS 證書,因此需要 cert-manager)
# 如果你手動安裝了CRD,而不是在Helm安裝命令中添加了`--set installCRDs=true`選項,你應該在升級Helm chart之前升級CRD資源。 kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.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.5.1安裝完 cert-manager 后,你可以通過檢查 cert-manager 命名空間中正在運行的 Pod 來驗證它是否已正確部署:
kubectl get pods --namespace cert-managerNAME READY STATUS RESTARTS AGE cert-manager-56b686b465-lh5gj 1/1 Running 0 65s cert-manager-cainjector-75c94654d-6s7n4 1/1 Running 0 65s cert-manager-webhook-d4fd4f479-rzxh4 1/1 Running 0 65s4.通過 helm 安裝 Rancher
helm install rancher rancher-stable/rancher \--namespace cattle-system \--set hostname=rancher.my.org \--set replicas=3 \--version 2.5.12- namespace:命名空間
- hostname:負載均衡器的 DNS 記錄,你需要通過這個域名來訪問 Rancher Server。
- replicas:設置為 Rancher 部署所使用的副本數量。
- version:Rancher 版本
等待 Rancher 運行:
kubectl -n cattle-system rollout status deploy/rancherWaiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available... deployment "rancher" successfully rolled out?查看 Rancher 運行狀態
kubectl -n cattle-system get deploy rancherNAME READY UP-TO-DATE AVAILABLE AGE rancher 3/3 3 3 3m29s至此,Rancher 部署也就完成了!
參考文檔:高可用安裝指南 | Rancher文檔
接下來我們測試一下我們安裝完成后的 Rancher。
因為我沒有購買域名,所以我需要做如下操作:
1.首先修改服務器的 hosts 文件,添加映射關系
vim /etc/hosts?本地電腦也要修改一下 hosts 文件,linux 系統同上操作,windows 系統,hosts 文件路徑為?C:\Windows\System32\drivers\etc\hosts,添加同上的操作。
2.配置完成后,打開瀏覽器訪問:rancher.my.org,由于第一次訪問,需要重新設置密碼
至此記錄一下 K8S、Rancher 學習。感謝網上的眾多大佬分享經驗!
文檔中所有內容,官網中均可找到!
總結
以上是生活随笔為你收集整理的RKE安装部署K8S集群、Rancher的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式第一堂
- 下一篇: 乔梁:实施 DevOps 过程中的两个关