離線部署Kubernetes v1.5.7 + calico

k8s部署拓撲圖

Master+ETCD

準備工作:

download dk8s.tar.gz 百度盤 密碼: 478m

基礎環(huán)境準備:需要在所有master/minion節(jié)點上執(zhí)行

1. download dk8s.tar.gz
2. tar zxvf  dk8s.tar.gz
3. cp -r dk8s/local /root/
4. export PATH=$PATH:/root/local/bin

注:

  1. 以下操作是ubuntu16 systemctl配置方式,ubuntu14請按照修改項修改script里面的腳本啟動。
  2. 以下所有kubectl命令都是在master上執(zhí)行的。

搭建單節(jié)點etcd

dk8s/master/etcd/etcd.service 內(nèi)容如下:

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
ExecStart=/root/local/bin/etcd \
  --name=etcd-host0 \
  --initial-advertise-peer-urls=http://192.168.56.135:2380 \
  --listen-peer-urls=http://192.168.56.135:2380 \
  --listen-client-urls=http://192.168.56.135:2379,http://127.0.0.1:2379 \
  --advertise-client-urls=http://192.168.56.135:2379 \
  --initial-cluster-token=etcd-cluster-0 \
  --initial-cluster=etcd-host0=http://192.168.56.135:2380 \
  --initial-cluster-state=new \
  --data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

修改etcd ip地址之后,執(zhí)行

mkdir /var/lib/etcd  #創(chuàng)建etcd data-dir
cp dk8s/master/etcd/etcd.service /etc/systemctl/system/
systemctl daemon-reload
systemctl enable etcd
systemctl start etcd

啟動kube-apiserver

dk8s/master/kube-apiserver/kube-apiserver.service 內(nèi)容如下:

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
ExecStart=/root/local/bin/kube-apiserver \
  --admission-control= \
  --advertise-address=192.168.56.135 \
  --insecure-bind-address=0.0.0.0 \
  --service-cluster-ip-range=10.254.0.0/16 \
  --service-node-port-range=30000-60000 \
  --etcd-servers=http://192.168.56.135:2379 \
  --enable-swagger-ui=true \
  --allow-privileged=true \
  --apiserver-count=3 \
  --audit-log-maxage=30 \
  --audit-log-maxbackup=3 \
  --audit-log-maxsize=100 \
  --audit-log-path=/var/lib/audit.log \
  --event-ttl=1h \
  --v=2
Restart=on-failure
RestartSec=5
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

修改:

  • --advertise-address=本機ip
  • --etcd-servers=http://<etcd ip>:<port>
cp dk8s/master/kube-apiserver/kube-apiserver.service /etc/systemctl/system/
systemctl daemon-reload
systemctl enable kube-apiserver
systemctl start kube-apiserver

這時netstat -nltp 能看到8080端口kube-apiserver服務已經(jīng)啟動

啟動kube-scheduler

dk8s/master/kube-scheduler/kube-scheduler.service 內(nèi)容如下:

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes

[Service]
ExecStart=/root/local/bin/kube-scheduler \
  --address=127.0.0.1 \
  --master=http://192.168.56.135:8080 \
  --leader-elect=true \
  --v=2
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

修改:

  • --master=http://<apiserver ip>:<port>
cp dk8s/master/kube-scheduler/kube-scheduler.service /etc/systemctl/system/
systemctl daemon-reload
systemctl enable kube-scheduler
systemctl start kube-scheduler

啟動kube-controller-manager

dk8s/master/kube-controller/kube-controller-manager.service 內(nèi)容如下:

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes

[Service]
ExecStart=/root/local/bin/kube-controller-manager \
  --address=127.0.0.1 \
  --master=http://192.168.56.135:8080 \
  --allocate-node-cidrs=true \
  --service-cluster-ip-range=10.254.0.0/16 \
  --cluster-cidr=172.30.0.0/16 \
  --cluster-name=kubernetes \
  --leader-elect=true \
  --v=2
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

修改:

  • --master=http://<apiserver ip>:<port>
  • --cluster-cidr=Pod網(wǎng)段(這個cidr和兩個服務有關kube-controller-manager、calico.yaml匣砖;而kube-proxy的cluster-cidr==service-cluster-ip-range)
cp dk8s/master/kube-controller/kube-controller-manager.service /etc/systemctl/system/
systemctl daemon-reload
systemctl enable kube-controller-manager
systemctl start kube-controller-manager

至此master服務部署基本完成,bird進程是后面部署calico時創(chuàng)建的,現(xiàn)在不用管.

root@master:~# kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health": "true"}

root@master:~# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1118/sshd
tcp        0      0 127.0.0.1:10251         0.0.0.0:*               LISTEN      4623/kube-scheduler
tcp        0      0 192.168.56.135:2379     0.0.0.0:*               LISTEN      2246/etcd
tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN      2246/etcd
tcp        0      0 127.0.0.1:10252         0.0.0.0:*               LISTEN      2633/kube-controlle
tcp        0      0 192.168.56.135:2380     0.0.0.0:*               LISTEN      2246/etcd
tcp        0      0 0.0.0.0:179             0.0.0.0:*               LISTEN      11156/bird
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1195/dnsmasq
tcp6       0      0 :::22                   :::*                    LISTEN      1118/sshd
tcp6       0      0 :::6443                 :::*                    LISTEN      5289/kube-apiserver
tcp6       0      0 :::8080                 :::*                    LISTEN      5289/kube-apiserver

Minion

啟動kubelet

dk8s/minion/kubelet/kubelet.service 內(nèi)容如下:

[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
ExecStart=/root/local/bin/kubelet \
  --api-servers=http://192.168.56.135:8080 \
  --address=192.168.56.136 \
  --hostname-override=192.168.56.136 \
  --cluster_dns=10.254.0.2 \
  --cluster_domain=cluster.local. \
  --hairpin-mode promiscuous-bridge \
  --allow-privileged=true \
  --serialize-image-pulls=false \
  --logtostderr=true \
  --pod-infra-container-image="visenzek8s/pause-amd64:3.0" \
  --network-plugin=cni \
  --network-plugin-dir=/etc/cni/net.d \
  --v=2
ExecStopPost=/sbin/iptables -A INPUT -s 10.0.0.0/8 -p tcp --dport 4194 -j ACCEPT
ExecStopPost=/sbin/iptables -A INPUT -s 172.16.0.0/12 -p tcp --dport 4194 -j ACCEPT
ExecStopPost=/sbin/iptables -A INPUT -s 192.168.0.0/16 -p tcp --dport 4194 -j ACCEPT
ExecStopPost=/sbin/iptables -A INPUT -p tcp --dport 4194 -j DROP
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

修改:

  • --api-servers=http://<apiserver ip>:<port>
  • --address=本機IP
  • --hostname-override=本機IP
apt-get install bridge-utils socat
cp dk8s/minion/kubelet/kubelet.service /etc/systemctl/system/
cp dk8s/master/calico/nsenter /usr/local/bin/
mkdir /var/lib/kubelet
cp -r dk8s/master/calico/cni /opt/

mkdir -p /etc/cni/net.d
cat >/etc/cni/net.d/10-calico.conf <<EOF
{
    "name": "calico-k8s-network",
    "type": "calico",
    "etcd_endpoints": "http://<ETCD_IP>:<ETCD_PORT>",
    "log_level": "info",
    "ipam": {
        "type": "calico-ipam"
    },
    "policy": {
        "type": "k8s"
    },
    "kubernetes": {
        "kubeconfig": "</PATH/TO/KUBECONFIG>"
    }
}
EOF

systemctl daemon-reload
systemctl enable kubelet
systemctl start kubelet

啟動kube-proxy

dk8s/minion/kube-proxy/kube-proxy.service 內(nèi)容如下:

[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target

[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/root/local/bin/kube-proxy \
  --master=http://192.168.56.135:8080 \
  --bind-address=192.168.56.136 \
  --hostname-override=192.168.56.136 \
  --cluster-cidr=10.254.0.0/16 \
  --logtostderr=true \
  --v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

修改:

  • --master=http://<apiserver ip>:<port>
  • --bind-address=本機IP
  • --hostname-owveride=本機IP
  • --cluster-cidr 必須與 kube-apiserver 的 --service-cluster-ip-range 選項值一致卵贱;kube-proxy 根據(jù) --cluster-cidr 判斷集群內(nèi)部和外部流量,指定 --cluster-cidr 或 --masquerade-all 選項后 kube-proxy 才會對訪問 Service IP 的請求做 SNAT侣集;
mkdir /var/lib/kube-proxy
cp kube-proxy.service /etc/systemctl/system/
systemctl daemon-reload
systemctl enable kube-proxy
systemctl start kube-proxy

至此minion部署完畢

在master上執(zhí)行

root@master:~# kubectl get nodes
NAME             STATUS    AGE
192.168.56.136   Ready     21h
192.168.56.137   Ready     19h
192.168.56.138   Ready     18h

部署calico

準備鏡像,
在minion節(jié)點上

cd k8s.images
for f in *.dif;do docker load -i $f;done
for f in calico/*.dif;do docker load -i $f;done

在master節(jié)點上:

dk8s/master/calico/calico.yaml 修改:

  • etcd_endpoints: "http://192.168.56.135:2379"對應etcd地址
  • CALICO_IPV4POOL_CIDR對應kube-controller-manager配置的--cluster-cidr的值
  • IP_AUTODETECTION_METHOD指定calico綁定Node的哪一個eth
  • CALICO_IPV4POOL_IPIP off
root@master:~/dk8s/master/calico# kubectl apply -f calico.yaml
root@master:~/dk8s# kubectl get pods --namespace=kube-system -o wide
NAME                                       READY     STATUS    RESTARTS   AGE       IP               NODE
calico-node-1kpqd                          2/2       Running   0          18h       192.168.56.138   192.168.56.138
calico-node-9bp5d                          2/2       Running   0          18h       192.168.56.136   192.168.56.136
calico-node-js8hk                          2/2       Running   0          18h       192.168.56.137   192.168.56.137
calico-policy-controller-279105993-jlg4w   1/1       Running   0          18h       192.168.56.137   192.168.56.137

修改dk8s/master/calico/conf/calico.conf中etcd地址

root@master:~/dk8s/master/calico# ./get_nodes.sh
NAME      ASN       IPV4                IPV6
minion1   (64512)   192.168.56.136/24
minion2   (64512)   192.168.56.137/24
minion3   (64512)   192.168.56.138/24

這時候所有的minion節(jié)點都配好calico服務了键俱,為了讓master能ping通pod,還需要我們自己手動啟動caliconode世分。
在master上執(zhí)行

calicoctl node run -c dk8s/master/calico/conf/calico.conf #可以通過--ip-autodetection-method 參數(shù)指定interface
root@master:~/dk8s/master/calico# ./get_nodes.sh
NAME      ASN       IPV4                IPV6
master    (64512)   192.168.56.135/24
minion1   (64512)   192.168.56.136/24
minion2   (64512)   192.168.56.137/24
minion3   (64512)   192.168.56.138/24
root@master:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.2.1        0.0.0.0         UG    100    0        0 enp0s8
10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 enp0s8
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s3
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.30.34.64    192.168.56.136  255.255.255.192 UG    0      0        0 enp0s3
172.30.51.128   192.168.56.138  255.255.255.192 UG    0      0        0 enp0s3
172.30.180.0    192.168.56.137  255.255.255.192 UG    0      0        0 enp0s3
172.30.219.64   0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 enp0s3

172.30.0.0/16就是pod獲取到的ip網(wǎng)段编振。

Dashboard

dk8s/master/kube-dashboard/heapster/heapster.yaml修改:

dk8s/master/kube-dashboard/dashboard.yaml、dk8s/master/kube-dashboard/head.yaml修改:

  • --apiserver-host=http://<apiserver ip>:<port>
kubectl create -f dk8s/master/kube-dashboard/heapster
kubectl create -f dk8s/masterkube-dashboard

dns

dk8s/master/dns/skydns-rc.yaml 修改:

  • --kube-master-url=http://<apiserver ip>:<port>
kubectl create -f dk8s/master/dns

nginx 測試

kubectl create -f dk8s/test-nginx
service "nginx-ds" created
daemonset "nginx-ds" created

1.測試service dns

root@master:~# kubectl exec busybox -- nslookup nginx-ds
Server:    10.254.0.2
Address 1: 10.254.0.2 kube-dns.kube-system.svc.cluster.local

Name:      nginx-ds
Address 1: 10.254.42.90 nginx-ds.default.svc.cluster.local

2.測試pod Ip

root@master:~# kubectl get pods --all-namespaces -o wide |grep nginx-ds
default       nginx-ds-47mwz                               1/1       Running   0          30m       172.30.180.14    192.168.56.137
default       nginx-ds-fft61                               1/1       Running   0          30m       172.30.34.82     192.168.56.136
default       nginx-ds-mt8fx                               1/1       Running   0          30m       172.30.51.149    192.168.56.138

root@master:~# wget 172.30.180.14:80
--2017-06-01 18:59:52--  http://172.30.180.14/
Connecting to 172.30.180.14:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 612 [text/html]
Saving to: ‘index.html’

index.html                                            100%[======================================================================================================================>]     612  --.-KB/s    in 0s      

2017-06-01 18:59:52 (173 MB/s) - ‘index.html’ saved [612/612]


3.測試集群內(nèi)部服務

root@master:~# kubectl exec busybox -- wget nginx-ds:80
Connecting to nginx-ds (10.254.42.90:80)
index.html           100% |*******************************|   612   0:00:00 ETA

4.測試外部服務:瀏覽器訪問任意<node ip>:36666,會顯示nginx頁面

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末臭埋,一起剝皮案震驚了整個濱河市踪央,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瓢阴,老刑警劉巖畅蹂,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荣恐,居然都是意外死亡液斜,警方通過查閱死者的電腦和手機累贤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來少漆,“玉大人臼膏,你說我怎么就攤上這事〖煲撸” “怎么了讶请?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屎媳。 經(jīng)常有香客問我夺溢,道長,這世上最難降的妖魔是什么烛谊? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任风响,我火速辦了婚禮,結(jié)果婚禮上丹禀,老公的妹妹穿的比我還像新娘状勤。我一直安慰自己,他們只是感情好双泪,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布持搜。 她就那樣靜靜地躺著,像睡著了一般焙矛。 火紅的嫁衣襯著肌膚如雪葫盼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天村斟,我揣著相機與錄音贫导,去河邊找鬼。 笑死蟆盹,一個胖子當著我的面吹牛孩灯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逾滥,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼峰档,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寨昙?” 一聲冷哼從身側(cè)響起面哥,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毅待,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體归榕,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡尸红,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片外里。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡怎爵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盅蝗,到底是詐尸還是另有隱情鳖链,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布墩莫,位于F島的核電站芙委,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狂秦。R本人自食惡果不足惜灌侣,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裂问。 院中可真熱鬧侧啼,春花似錦、人聲如沸堪簿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椭更。三九已至哪审,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甜孤,已是汗流浹背协饲。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缴川,地道東北人茉稠。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像把夸,于是被迫代替她去往敵國和親而线。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Kubernetes作為容器應用的管理中心恋日,通過對Pod的數(shù)量進行監(jiān)控膀篮,并且根據(jù)主機或容器失效的狀態(tài)將新的Pod調(diào)...
    輝耀輝耀閱讀 4,605評論 0 13
  • 版權(quán)聲明:原創(chuàng)作品,謝絕轉(zhuǎn)載岂膳!否則將追究法律責任誓竿。 前言 最近中國和印度的局勢也是愈演愈烈。作為一個愛國青年我有些...
    李偉銘MIng閱讀 2,069評論 0 5
  • 安裝k8s Master高可用集群 主機 角色 組件 172.18.6.101 K8S Master Kubele...
    jony456123閱讀 8,053評論 0 9
  • 最近谈截,老爹買了社區(qū)里保健品公司的所謂的半導體激光治療儀筷屡。一個比手表大些的東西涧偷。要3000多元,我立刻去百度查了一下...
    牙膏藍閱讀 247評論 0 0
  • 關于痔瘡毙死,大家對這個話題都很感興趣燎潮,常言說,十人九痔扼倘,痔瘡那确封,它分內(nèi)痔,外痔再菊,混合痔爪喘。 內(nèi)痔它不痛,都是大便出血袄简,...
    01cf05eaaa01閱讀 827評論 0 2