k8s 手动恢复redis 集群_二进制手动部署k8s-1.14高可用集群(二、集群部署)
1. CA證書(任意節點)
1.1 安裝cfssl
cfssl是非常好用的CA工具,我們用它來生成證書和秘鑰文件
安裝過程比較簡單,如下:
# 下載
$ mkdir -p ~/bin
$ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O ~/bin/cfssl
$ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O ~/bin/cfssljson
# 修改為可執行權限
$ chmod +x ~/bin/cfssl ~/bin/cfssljson
# 設置PATH
$ vi ~/.bash_profile
$ source ~/.bash_profile
# 驗證
$ cfssl version
1.2 生成根證書
根證書是集群所有節點共享的,只需要創建一個 CA 證書,后續創建的所有證書都由它簽名。
# 生成證書和私鑰
$ cd target/pki
$ cfssl gencert -initca ca-csr.json | cfssljson -bare ca
# 生成完成后會有以下文件(我們最終想要的就是ca-key.pem和ca.pem,一個秘鑰,一個證書)
$ ls
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
# 創建目錄
$ ssh <user>@<node-ip> "mkdir -p /etc/kubernetes/pki/"
# 分發到每個主節點
$ scp ca*.pem <user>@<node-ip>:/etc/kubernetes/pki/
2. 部署etcd集群(master節點)
2.1 下載etcd
如果你是從網盤下載的二進制可以跳過這一步(網盤中已經包含了etcd,不需要另外下載)。
沒有從網盤下載bin文件的話需要自己下載etcd
$ wget https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz
2.2 生成證書和私鑰
# 生成證書、私鑰
$ cd target/pki/etcd
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes etcd-csr.json | cfssljson -bare etcd
# 分發到每個etcd節點
$ scp etcd*.pem <user>@<node-ip>:/etc/kubernetes/pki/
2.3 創建service文件
# scp配置文件到每個master節點
$ scp target/<node-ip>/services/etcd.service <node-ip>:/etc/systemd/system/
# 創建數據和工作目錄
$ ssh <user>@<node-ip> "mkdir -p /var/lib/etcd"
2.4 啟動服務
etcd 進程首次啟動時會等待其它節點的 etcd 加入集群,命令 systemctl start etcd 會卡住一段時間,為正?,F象。
#啟動服務
$ systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd
#查看狀態
$ service etcd status
#查看啟動日志
$ journalctl -f -u etcd
3. 部署api-server(master節點)
3.1 生成證書和私鑰
# 生成證書、私鑰
$ cd target/pki/apiserver
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
# 分發到每個master節點
$ scp kubernetes*.pem <user>@<node-ip>:/etc/kubernetes/pki/
3.2 創建service文件
# scp配置文件到每個master節點
$ scp target/<node-ip>/services/kube-apiserver.service <user>@<node-ip>:/etc/systemd/system/
# 創建日志目錄
$ ssh <user>@<node-ip> "mkdir -p /var/log/kubernetes"
3.3 啟動服務
#啟動服務
$ systemctl daemon-reload && systemctl enable kube-apiserver && systemctl restart kube-apiserver
#查看運行狀態
$ service kube-apiserver status
#查看日志
$ journalctl -f -u kube-apiserver
#檢查監聽端口
$ netstat -ntlp
4. 部署keepalived - apiserver高可用(master節點)
4.1 安裝keepalived
# 在兩個主節點上安裝keepalived(一主一備)
$ yum install -y keepalived
4.2 創建keepalived配置文件
# 創建目錄
$ ssh <user>@<master-ip> "mkdir -p /etc/keepalived"
$ ssh <user>@<backup-ip> "mkdir -p /etc/keepalived"
# 分發配置文件
$ scp target/configs/keepalived-master.conf <user>@<master-ip>:/etc/keepalived/keepalived.conf
$ scp target/configs/keepalived-backup.conf <user>@<backup-ip>:/etc/keepalived/keepalived.conf
# 分發監測腳本
$ scp target/configs/check-apiserver.sh <user>@<master-ip>:/etc/keepalived/
$ scp target/configs/check-apiserver.sh <user>@<backup-ip>:/etc/keepalived/
4.3 啟動keepalived
# 分別在master和backup上啟動服務
$ systemctl enable keepalived && service keepalived start
# 檢查狀態
$ service keepalived status
# 查看日志
$ journalctl -f -u keepalived
# 訪問測試
$ curl --insecure https://<master-vip>:6443/
5. 部署kubectl(任意節點)
kubectl 是 kubernetes 集群的命令行管理工具,它默認從 ~/.kube/config 文件讀取 kube-apiserver 地址、證書、用戶名等信息。
5.1 創建 admin 證書和私鑰
kubectl 與 apiserver https 安全端口通信,apiserver 對提供的證書進行認證和授權。
kubectl 作為集群的管理工具,需要被授予最高權限。這里創建具有最高權限的 admin 證書。
# 創建證書、私鑰
$ cd target/pki/admin
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes admin-csr.json | cfssljson -bare admin
5.2 創建kubeconfig配置文件
kubeconfig 為 kubectl 的配置文件,包含訪問 apiserver 的所有信息,如 apiserver 地址、CA 證書和自身使用的證書
# 設置集群參數
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<MASTER_VIP>:6443
--kubeconfig=kube.config
# 設置客戶端認證參數
$ kubectl config set-credentials admin
--client-certificate=admin.pem
--client-key=admin-key.pem
--embed-certs=true
--kubeconfig=kube.config
# 設置上下文參數
$ kubectl config set-context kubernetes
--cluster=kubernetes
--user=admin
--kubeconfig=kube.config
# 設置默認上下文
$ kubectl config use-context kubernetes --kubeconfig=kube.config
# 分發到目標節點
$ scp kube.config <user>@<node-ip>:~/.kube/config
5.3 授予 kubernetes 證書訪問 kubelet API 的權限
在執行 kubectl exec、run、logs 等命令時,apiserver 會轉發到 kubelet。這里定義 RBAC 規則,授權 apiserver 調用 kubelet API。
$ kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user kubernetes
5.4 小測試
# 查看集群信息
$ kubectl cluster-info
$ kubectl get all --all-namespaces
$ kubectl get componentstatuses
6. 部署controller-manager(master節點)
controller-manager啟動后將通過競爭選舉機制產生一個 leader 節點,其它節點為阻塞狀態。當 leader 節點不可用后,剩余節點將再次進行選舉產生新的 leader 節點,從而保證服務的可用性。
6.1 創建證書和私鑰
# 生成證書、私鑰
$ cd target/pki/controller-manager
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes controller-manager-csr.json | cfssljson -bare controller-manager
# 分發到每個master節點
$ scp controller-manager*.pem <user>@<node-ip>:/etc/kubernetes/pki/
6.2 創建controller-manager的kubeconfig
# 創建kubeconfig
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<MASTER_VIP>:6443
--kubeconfig=controller-manager.kubeconfig
$ kubectl config set-credentials system:kube-controller-manager
--client-certificate=controller-manager.pem
--client-key=controller-manager-key.pem
--embed-certs=true
--kubeconfig=controller-manager.kubeconfig
$ kubectl config set-context system:kube-controller-manager
--cluster=kubernetes
--user=system:kube-controller-manager
--kubeconfig=controller-manager.kubeconfig
$ kubectl config use-context system:kube-controller-manager --kubeconfig=controller-manager.kubeconfig
# 分發controller-manager.kubeconfig
$ scp controller-manager.kubeconfig <user>@<node-ip>:/etc/kubernetes/
6.3 創建service文件
# scp配置文件到每個master節點
$ scp target/services/kube-controller-manager.service <user>@<node-ip>:/etc/systemd/system/
6.4 啟動服務
# 啟動服務
$ systemctl daemon-reload && systemctl enable kube-controller-manager && systemctl restart kube-controller-manager
# 檢查狀態
$ service kube-controller-manager status
# 查看日志
$ journalctl -f -u kube-controller-manager
# 查看leader
$ kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml
7. 部署scheduler(master節點)
scheduler啟動后將通過競爭選舉機制產生一個 leader 節點,其它節點為阻塞狀態。當 leader 節點不可用后,剩余節點將再次進行選舉產生新的 leader 節點,從而保證服務的可用性。
7.1 創建證書和私鑰
# 生成證書、私鑰
$ cd target/pki/scheduler
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes scheduler-csr.json | cfssljson -bare kube-scheduler
7.2 創建scheduler的kubeconfig
# 創建kubeconfig
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<MASTER_VIP>:6443
--kubeconfig=kube-scheduler.kubeconfig
$ kubectl config set-credentials system:kube-scheduler
--client-certificate=kube-scheduler.pem
--client-key=kube-scheduler-key.pem
--embed-certs=true
--kubeconfig=kube-scheduler.kubeconfig
$ kubectl config set-context system:kube-scheduler
--cluster=kubernetes
--user=system:kube-scheduler
--kubeconfig=kube-scheduler.kubeconfig
$ kubectl config use-context system:kube-scheduler --kubeconfig=kube-scheduler.kubeconfig
# 分發kubeconfig
$ scp kube-scheduler.kubeconfig <user>@<node-ip>:/etc/kubernetes/
7.3 創建service文件
# scp配置文件到每個master節點
$ scp target/services/kube-scheduler.service <user>@<node-ip>:/etc/systemd/system/
7.4 啟動服務
# 啟動服務
$ systemctl daemon-reload && systemctl enable kube-scheduler && systemctl restart kube-scheduler
# 檢查狀態
$ service kube-scheduler status
# 查看日志
$ journalctl -f -u kube-scheduler
# 查看leader
$ kubectl get endpoints kube-scheduler --namespace=kube-system -o yaml
8. 部署kubelet(worker節點)
8.1 預先下載需要的鏡像
# 預先下載鏡像到所有節點(由于鏡像下載的速度過慢,我給大家提供了阿里云倉庫的鏡像)
$ scp target/configs/download-images.sh <user>@<node-ip>:~
# 在目標節點上執行腳本下載鏡像
$ sh ~/download-images.sh
8.2 創建bootstrap配置文件
# 創建 token
$ cd target/pki/admin
$ export BOOTSTRAP_TOKEN=$(kubeadm token create
--description kubelet-bootstrap-token
--groups system:bootstrappers:worker
--kubeconfig kube.config)
# 設置集群參數
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<MASTER_VIP>:6443
--kubeconfig=kubelet-bootstrap.kubeconfig
# 設置客戶端認證參數
$ kubectl config set-credentials kubelet-bootstrap
--token=${BOOTSTRAP_TOKEN}
--kubeconfig=kubelet-bootstrap.kubeconfig
# 設置上下文參數
$ kubectl config set-context default
--cluster=kubernetes
--user=kubelet-bootstrap
--kubeconfig=kubelet-bootstrap.kubeconfig
# 設置默認上下文
$ kubectl config use-context default --kubeconfig=kubelet-bootstrap.kubeconfig
# 把生成的配置copy到每個worker節點上
$ scp kubelet-bootstrap.kubeconfig <user>@<node-ip>:/etc/kubernetes/kubelet-bootstrap.kubeconfig
# 先在worker節點上創建目錄
$ mkdir -p /etc/kubernetes/pki
# 把ca分發到每個worker節點
$ scp target/pki/ca.pem <user>@<node-ip>:/etc/kubernetes/pki/
8.3 kubelet配置文件
把kubelet配置文件分發到每個worker節點上
$ scp target/worker-<node-ip>/kubelet.config.json <user>@<node-ip>:/etc/kubernetes/
8.4 kubelet服務文件
把kubelet服務文件分發到每個worker節點上
$ scp target/worker-<node-ip>/kubelet.service <user>@<node-ip>:/etc/systemd/system/
8.5 啟動服務
kublet 啟動時查找配置的 –kubeletconfig 文件是否存在,如果不存在則使用 –bootstrap-kubeconfig 向 kube-apiserver 發送證書簽名請求 (CSR)。
kube-apiserver 收到 CSR 請求后,對其中的 Token 進行認證(事先使用 kubeadm 創建的 token),認證通過后將請求的 user 設置為 system:bootstrap:,group 設置為 system:bootstrappers,這就是Bootstrap Token Auth。
# bootstrap附權
$ kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --group=system:bootstrappers
# 啟動服務
$ mkdir -p /var/lib/kubelet
$ systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet
# 在master上Approve bootstrap請求
$ kubectl get csr
$ kubectl certificate approve <name>
# 查看服務狀態
$ service kubelet status
# 查看日志
$ journalctl -f -u kubelet
9. 部署kube-proxy(worker節點)
9.1 創建證書和私鑰
$ cd target/pki/proxy
$ cfssl gencert -ca=../ca.pem
-ca-key=../ca-key.pem
-config=../ca-config.json
-profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
9.2 創建和分發 kubeconfig 文件
# 創建kube-proxy.kubeconfig
$ kubectl config set-cluster kubernetes
--certificate-authority=../ca.pem
--embed-certs=true
--server=https://<master-vip>:6443
--kubeconfig=kube-proxy.kubeconfig
$ kubectl config set-credentials kube-proxy
--client-certificate=kube-proxy.pem
--client-key=kube-proxy-key.pem
--embed-certs=true
--kubeconfig=kube-proxy.kubeconfig
$ kubectl config set-context default
--cluster=kubernetes
--user=kube-proxy
--kubeconfig=kube-proxy.kubeconfig
$ kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
# 分發kube-proxy.kubeconfig
$ scp kube-proxy.kubeconfig <user>@<node-ip>:/etc/kubernetes/
9.3 分發kube-proxy.config
$ scp target/worker-<node-ip>/kube-proxy.config.yaml <user>@<node-ip>:/etc/kubernetes/
9.4 分發kube-proxy服務文件
$ scp target/services/kube-proxy.service <user>@<node-ip>:/etc/systemd/system/
9.5 啟動服務
# 創建依賴目錄
$ mkdir -p /var/lib/kube-proxy && mkdir -p /var/log/kubernetes
# 啟動服務
$ systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy
# 查看狀態
$ service kube-proxy status
# 查看日志
$ journalctl -f -u kube-proxy
10. 部署CNI插件 - calico
我們使用calico官方的安裝方式來部署。
# 創建目錄(在配置了kubectl的節點上執行)
$ mkdir -p /etc/kubernetes/addons
# 上傳calico配置到配置好kubectl的節點(一個節點即可)
$ scp target/addons/calico* <user>@<node-ip>:/etc/kubernetes/addons/
# 部署calico
$ kubectl create -f /etc/kubernetes/addons/calico-rbac-kdd.yaml
$ kubectl create -f /etc/kubernetes/addons/calico.yaml
# 查看狀態
$ kubectl get pods -n kube-system
11. 部署DNS插件 - coredns
# 上傳配置文件
$ scp target/addons/coredns.yaml <user>@<node-ip>:/etc/kubernetes/addons/
# 部署coredns
$ kubectl create -f /etc/kubernetes/addons/coredns.yaml
總結
以上是生活随笔為你收集整理的k8s 手动恢复redis 集群_二进制手动部署k8s-1.14高可用集群(二、集群部署)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java list 初始化_Java新特
- 下一篇: 软件与硬件我该选哪个_MacBook A