細述kubernetes HA安裝方式- sealos詳解
本文教你如何用一條 構建k8s高可用叢集且不依賴haproxy和keepalived,也無需ansible。透過核心ipvs對apiserver進行負載均衡,並且帶apiserver健康檢測。
裝好docker並啟動docker,把離線安裝包 下載好複製到所有節點的/root目錄下, 不需要解壓,如果有檔案伺服器更好,sealos支援從一個伺服器上wget到所有節點上
sealos已經放在離線包中,解壓後在kube/bin目錄下(可以解壓一個,獲取sealos bin檔案)
sealos init \ --master 192.168.0.2 \ --master 192.168.0.3 \ --master 192.168.0.4 \ # master地址列表 --node 192.168.0.5 \ # node地址列表 --user root \ # 服務使用者名稱 --passwd your-server-password \ # 伺服器密碼,用於遠端執行命令 --pkg kube1.14.1.tar.gz \ # 離線安裝包名稱 --version v1.14.1 # kubernetes 離線安裝包版本,這渲染kubeadm配置時需要使用
然後,就沒有然後了
--kubeadm-config string kubeadm-config.yaml local # 自定義kubeadm配置檔案,如有這個sealos就不去渲染kubeadm配置 --pkg-url string 支援從遠端拉取離線包,省的每個機器複製,前提你得有個http伺服器放離線包 --vip string virtual ip (default "10.103.97.2") # 代理master的虛擬IP,只要與你地址不衝突請不要改
sealos clean \ --master 192.168.0.2 \ --master 192.168.0.3 \ --master 192.168.0.4 \ # master地址列表 --node 192.168.0.5 \ # node地址列表 --user root \ # 服務使用者名稱 --passwd your-server-password
新增節點可直接使用kubeadm, 到新節點上解壓
cd kube/shell && init.sh echo "10.103.97.2 apiserver.cluster.local" >> /etc/hosts # using vip kubeadm join 10.103.97.2:6443 --token 9vr73a.a8uxyaju799qwdjv \ --master 10.103.97.100:6443 \ --master 10.103.97.101:6443 \ --master 10.103.97.102:6443 \ --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866
離線包裡包含了yaml配置和映象,使用者按需安裝。
cd /root/kube/conf kubectl taint nodes --all node-role.kubernetes.io/master- # 去汙點,根據需求看情況,去了後master允許排程 kubectl apply -f heapster/ # 安裝heapster, 不安裝dashboard上沒監控資料 kubectl apply -f heapster/rbac kubectl apply -f dashboard # 裝dashboard kubectl apply -f prometheus # 裝監控
是不是很神奇,到底是如何做到這點的?那就需要去看下面兩個東西
我們定製了kubeadm,做了兩個事情:
在每個node節點上增加了一條ipvs規則,其後端代理了三個master
在node上起了一個lvscare的static pod去守護這個 ipvs, 一旦apiserver不可訪問了,會自動清理掉所有node上對應的ipvs規則, master恢復正常時新增回來。
透過這樣的方式實現每個node上透過本地核心負載均衡訪問masters:
+----------+ +---------------+ virturl server: 127.0.0.1:6443 | mater0 |< ----------------------| ipvs nodes | real servers: +----------+ |+---------------+ 10.103.97.200:6443 | 10.103.97.201:6443 +----------+ | 10.103.97.202:6443 | mater1 |<---------------------+ +----------+ | | +----------+ | | mater2 |<---------------------+ +----------+
其實sealos就是幫你執行了如下命令:
super-kubeadm
在你的node上增加了三個東西:
cat /etc/kubernetes/manifests # 這下面增加了lvscare的static pod ipvsadm -Ln # 可以看到建立的ipvs規則 cat /etc/hosts # 增加了虛擬IP的地址解析
這是一個超級簡單輕量級的lvs建立與守護程式,支援健康檢查,底層與kube-proxy使用的是相同的庫,支援HTTP的健康檢測。
ipvsadm -C
啟動幾個nginx作為ipvs代理後端的realserver
docker run -p 8081:80 --name nginx1 -d nginx docker run -p 8082:80 --name nginx2 -d nginx docker run -p 8083:80 --name nginx3 -d nginx
lvscare care --vs 10.103.97.12:6443 --rs 127.0.0.1:8081 --rs 127.0.0.1:8082 --rs 127.0.0.1:8083 \ --health-path / --health-schem http
可以看到規則已經被建立
ipvsadm -Ln [root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.103.97.12:6443 rr -> 127.0.0.1:8081 Masq 1 0 0 -> 127.0.0.1:8082 Masq 1 0 0 -> 127.0.0.1:8083 Masq 1 0 0 curl vip: [root@iZj6c9fiza9orwscdhate4Z ~]# curl 10.103.97.12:6443
刪除一個nginx,規則就少了一條
[root@iZj6c9fiza9orwscdhate4Z ~]# docker stop nginx1 nginx1 [root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.103.97.12:6443 rr -> 127.0.0.1:8082 Masq 1 0 0 -> 127.0.0.1:8083 Masq 1 0 1
再刪除一個:
[root@iZj6c9fiza9orwscdhate4Z ~]# docker stop nginx2 nginx2 [root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.103.97.12:6443 rr -> 127.0.0.1:8083 Masq 1 0 0
此時VIP任然可以訪問:
[root@iZj6c9fiza9orwscdhate4Z ~]# curl 10.103.97.12:6443
全部刪除, 規則就自動被清除光了, curl也curl不通了,因為沒realserver可用了
[root@iZj6c9fiza9orwscdhate4Z ~]# docker stop nginx3 nginx3 [root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.103.97.12:6443 rr [root@iZj6c9fiza9orwscdhate4Z ~]# curl 10.103.97.12:6443 curl: (7) Failed connect to 10.103.97.12:6443; 拒絕連線
再把nginx都啟動起來,規則就自動被加回來
[root@iZj6c9fiza9orwscdhate4Z ~]# docker start nginx1 nginx2 nginx3 nginx1 nginx2 nginx3 [root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.103.97.12:6443 rr -> 127.0.0.1:8081 Masq 1 0 0 -> 127.0.0.1:8082 Masq 1 0 0 -> 127.0.0.1:8083 Masq 1 0 0
所以sealos中,上面apiserver就是上面三個nginx,lvscare會對其進行健康檢測。當然你也可以把lvscare用於一些其它場景,比如代理自己的TCP服務等
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2644821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 細述Kubernetes和Docker容器的儲存方式Docker
- Kubernetes安裝之一:HA-高可用配置
- MySQL 5.7.17 原始碼方式安裝詳細步驟MySql原始碼
- CentOS 6.3安裝(詳細圖解教程)CentOS圖解
- kubernetes系列(十七) - 通過helm安裝dashboard詳細教程
- centos7安裝教程詳解 centos7安裝詳細步驟CentOS
- Nginx安裝(詳細版本)Nginx
- Jenkins安裝部署使用圖文詳解(非常詳細)Jenkins
- MySQL5.7.21解壓版安裝詳細教程MySql
- Redis安裝教程(超詳細)Redis
- windows安裝mongodb詳細教程WindowsMongoDB
- Jmeter安裝配置詳細教程JMeter
- lnmp環境安裝詳細LNMP
- RHEL 6.3 詳細安裝教程
- 安裝wordpress教程詳細安裝wordpress步揍
- Mac安裝Redis,詳細redis安裝步驟MacRedis
- 簡述Kubernetes Secret有哪些使用方式
- 【安裝】Windows下Oracle安裝圖解----oracle-win-64-11g 詳細安裝步驟WindowsOracle圖解
- 詳細講述 Oracle 密碼丟失解決方法Oracle密碼
- 如何安裝leapftp,如何安裝leapftp的詳細教程FTP
- Oracle9i的詳細安裝與解除安裝步驟(有圖解)Oracle圖解
- docker安裝portainer詳細步驟DockerAI
- MySQL的安裝步驟(詳細)MySql
- Centos下Elasticsearch安裝詳細教程CentOSElasticsearch
- rabbitmq簡易安裝詳細教程MQ
- sublime安裝外掛詳細教程
- VNC安裝配置詳細說明VNC
- Linux安裝Nginx詳細教程LinuxNginx
- ghost win10安裝教程詳細步驟圖解Win10圖解
- Kubernetes叢集部署史上最詳細(一)Kubernetes叢集安裝
- arcgis安裝教程10.2 arcgis詳細安裝步驟
- ubuntu20.04安裝教程超詳細 安裝ubuntu系統步驟圖解Ubuntu圖解
- Maven安裝詳解Maven
- CentOS 7 中英文桌面安裝步驟詳細圖解CentOS圖解
- 蘋果cms安裝及配置詳細教程蘋果
- Python 與 PyCharm 安裝詳細教程PythonPyCharm
- Centos7 安裝 Docker 詳細教程CentOSDocker
- python詳細的安裝教程分享!Python