前一篇:k8s 二進制部署之 Node 組件部署
架構

部署
一、系統初始化配置
第一步同樣需要對新的訪問進行初始化操作,請看 k8s 二進制部署之系統初始化配置,host 需更新,新加 master 與已有 master,
二、更新證書
2.1 更新 https 證書
1 . 更新 api server https 證書,此時需要將 LB VIP 新節點 ip 都需要加入到 hosts,在 ~/TLS/k8s 目錄
cd ~/TLS/k8s
cat > server-csr.json << EOF
{
"CN": "kubernetes",
"hosts": [
"10.0.0.1",
"127.0.0.1",
"192.168.91.130",
"192.168.91.131",
"192.168.91.132",
"192.168.91.133",
"192.168.91.135",
"192.168.91.136",
"192.168.91.166",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
2 . 生成證書,會生成 server.pem 和 server-key.pem 檔案
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
3 . 拷貝新 k8s apiserver 證書,到 k8s 作業目錄
cp ~/TLS/k8s/ca*pem ~/TLS/k8s/server*pem /opt/kubernetes/ssl/
2.2 更新 kubeconfig
1 . 因為更新了 https 證書,所以 kubeconfig 也需要跟著更新
cd /opt/kubernetes/ssl/
# 創建kubelet bootstrapping kubeconfig
BOOTSTRAP_TOKEN=c47ffb939f5ca36231d9e3121a252940
KUBE_APISERVER="https://192.168.91.130:6443"
# 設定集群引數
kubectl config set-cluster kubernetes \
--certificate-authority=./ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=bootstrap.kubeconfig
# 設定客戶端認證引數
kubectl config set-credentials kubelet-bootstrap \
--token=${BOOTSTRAP_TOKEN} \
--kubeconfig=bootstrap.kubeconfig
# 設定背景關系引數
kubectl config set-context default \
--cluster=kubernetes \
--user=kubelet-bootstrap \
--kubeconfig=bootstrap.kubeconfig
# 設定默認背景關系
kubectl config use-context default --kubeconfig=bootstrap.kubeconfig
#----------------------
# 創建kube-proxy kubeconfig檔案
kubectl config set-cluster kubernetes \
--certificate-authority=./ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--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
2 . 將這兩個檔案拷貝到 Node 節點 k8s 作業目錄下
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.91.131:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.91.132:/opt/kubernetes/cfg/
三、復制新 master 所需檔案
3.1 作業目錄
在新 master 創建 k8s 作業目錄
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}
3.2 復制 k8s 相關檔案
1 . 復制可執行檔案 kube-apiserver、kube-controller-manager、kube-scheduler、證書、配置
scp -r /opt/kubernetes/ root@192.168.91.133:/opt
2 . 復制 kube-apiserver、kube-controller-manager、kube-scheduler 的 systemd 檔案
scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@192.168.91.133:/usr/lib/systemd/system
3 . 復制 kubectl
scp /usr/bin/kubectl root@192.168.91.133:/usr/bin
4 . 復制 etcd 證書
scp -r /opt/etcd root@192.168.91.133:/opt
四、修改新 master 組態檔
bind-address、advertise-address 修改為本機 ip
vi /opt/kubernetes/cfg/kube-apiserver.conf
KUBE_APISERVER_OPTS="--logtostderr=true \
--v=4 \
--etcd-servers=https://192.168.91.130:2379,https://192.168.91.131:2379,https://192.168.91.132:2379 \
--bind-address=192.168.91.133 \
--secure-port=6443 \
--advertise-address=192.168.91.133 \
--allow-privileged=true \
--service-cluster-ip-range=10.0.0.0/24 \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota,NodeRestriction \
--authorization-mode=RBAC,Node \
--enable-bootstrap-token-auth \
--token-auth-file=/opt/kubernetes/cfg/token.csv \
--service-node-port-range=30000-50000 \
--tls-cert-file=/opt/kubernetes/ssl/server.pem \
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
--client-ca-file=/opt/kubernetes/ssl/ca.pem \
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \
--etcd-cafile=/opt/etcd/ssl/ca.pem \
--etcd-certfile=/opt/etcd/ssl/server.pem \
--etcd-keyfile=/opt/etcd/ssl/server-key.pem"
五、啟動新 master 組件
systemctl start kube-apiserver.service
systemctl status kube-apiserver.service
systemctl enable kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl status kube-controller-manager.service
systemctl enable kube-controller-manager.service
systemctl start kube-scheduler.service
systemctl status kube-scheduler.service
systemctl enable kube-scheduler.service
六、檢查
kubectl get cs
kubectl get node

七、 Nginx、Keepalived
我們用 nginx 的 stream 模塊做負載均衡,因此,master 將不直連 kube-apiserver 而是連接 nginx,再由 nginx 轉發,做 nginx高可用的就需要寫 vip 因為 ip 需要漂移,
7.1 安裝 Nginx
1 . 在 192.168.91.135、192.168.91.136 服務器,安裝 Nginx,
請參考 Nginx 部署
2 . 如果是編譯安裝的,沒有加入此模塊的,我們需要加入此模塊 stream ,進入 nginx 原始碼目錄,執行下面命令,
./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-pcre --with-stream
make && make install
cp -rf ./objs/nginx /usr/local/nginx/sbin
可以查看模塊是否安裝成功,使用下面命令
/usr/local/nginx/sbin/nginx -V
7.2 安裝 Keepalived
在 192.168.91.135、192.168.91.136 服務器,安裝 Keepalived,
請參考 Keepalived 部署
7.3 Keepalived+Nginx 高可用
在 192.168.91.135、192.168.91.136 服務器,配置 Keepalived、撰寫 Nginx 檢測腳本即可
請參考 Keepalived+Nginx 高可用配置
八、配置 master 高可用
在 192.168.91.135、192.168.91.136 服務器,修改 Nginx 組態檔,如下
stream {
upstream k8s-apiserver {
server 192.168.91.130:6443;
server 192.168.91.133:6443;
}
server {
listen 6443;
proxy_pass k8s-apiserver;
}
}
這個是 4 層 TCP 協議,不要寫到 http{} 模塊里面,不然會報錯
./nginx -s reload
九、node 節點組態檔統一 VIP
1 . bootstrap.kubeconfig、kubelet.kubeconfig、kube-proxy.kubeconfig 修改 server: https://192.168.91.166:6443
cd /opt/kubernetes/cfg/
vim bootstrap.kubeconfig
vim kubelet.kubeconfig
vim kube-proxy.kubeconfig
2 . 重啟 kube-proxy、kubelet
重啟各個 node 節點 kube-proxy、kubelet
systemctl restart kubelet.service
systemctl restart kube-proxy.service
重啟完成后,可以查看其狀態看是否成功
systemctl status kube-proxy
systemctl status kubelet
十、測驗
10.1 master 宕機
關閉 master1 節點,然后在 master2 查看集群狀態


10.2 IP 漂移
1 . 查看 VIP 可以看到此時在 192.168.91.135 服務器,


2 . 關閉 192.168.91.135 服務器,接著查看 192.168.91.136 服務器 ip,可以看到 VIP 漂移到了此服務器


3 . 在 master 2 查看,集群狀態,可以看到 node 幾點依舊正常

十一、注意
-
高可用
nginx、Keepalived 設定開機自啟、且 Keepalived 與 Nginx 直接的 check 需要正確 -
為什么 kubectl get node
二進制部署就是不會把master作為集群節點的(沒有在master上跑kubelet,保持單純管理功能)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295045.html
標籤:其他
下一篇:Jenkins搭建
