您好,登錄后才能下訂單哦!
kubernetes集群三步安裝
本文教你如何用一條命令構建k8s高可用集群且不依賴haproxy和keepalived,也無需ansible。通過內核ipvs對apiserver進行負載均衡,并且帶apiserver健康檢測。
sealos項目地址
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://store.lameleg.com/kube1.14.1.tar.gz download offline pakage url # 支持從遠程拉取離線包,省的每個機器拷貝,前提你得有個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上通過本地內核負載均衡訪問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的健康檢測。
清理機器上的IPVS規則
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守護它們
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
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
刪除一個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
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
全部刪除, 規則就自動被清除光了, 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服務等
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。