使用 kubeadm 離線部署 kubernete v1.13.0

ip hostname role
10.127.24.180 k8s-node1 k8s-node
10.127.24.179 k8s-master1 k8s-master
10.39.5.226 k8s-node2 k8s-node

一疯特、準備工作

1救拉、 開啟 docker
check docker 版本及其 check cgroup driver

$ docker --version
Docker version 17.05.0-ce, build e1bfc47
$ systemctl enable docker && systemctl restart docker && systemctl status docker
docker is active
$ docker info | grep Cgroup
Cgroup Driver: cgroupfs

2、 check 各節(jié)點是否互聯(lián)

3、 check 防火墻是否關閉
firewall的底層是使用iptables進行數(shù)據(jù)過濾拌牲,建立在iptables之上殿雪,這可能會與 Docker 產生沖突宿饱。比如,當 firewalld 啟動或者重啟的時候芯急,將會從 iptables 中移除 DOCKER 的規(guī)則鏈失驶,從而影響了 Docker 的正常工作

systemctl status firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service

4土居、 禁掉所有的swap分區(qū)
修改/etc/fstab文件,注釋掉 SWAP 的自動掛載,防止重啟后swap啟用
Kubernetes 1.8開始要求關閉系統(tǒng)的Swap擦耀。如果不關閉棉圈,默認配置下kubelet將無法啟動
free -m 檢查 swap 是否關閉

$ swapoff -a
$ vim /etc/fstab
#把這行注釋: /dev/mapper/centos-swap swap
$ free -m
Swap:             0           0           0

5、 關閉 SELinux
把 SELinux設為 permissive 模式眷蜓。否則容器不能訪問宿主機文件系統(tǒng)分瘾。

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

6、 開啟橋接網絡支持
只針對(RHEL/CentOS 7)系統(tǒng)
什么是ipv4轉發(fā):出于安全考慮吁系,Linux系統(tǒng)默認是禁止數(shù)據(jù)包轉發(fā)的德召。轉發(fā)即當主機擁有多于一塊的網卡時,其中一塊收到數(shù)據(jù)包汽纤,根據(jù)數(shù)據(jù)包的目的ip地址將數(shù)據(jù)包發(fā)往本機另一塊網卡上岗,該網卡根據(jù)路由表繼續(xù)發(fā)送數(shù)據(jù)包。這通常是路由器所要實現(xiàn)的功能蕴坪。
kube-proxy的ipvs模式和calico(都涉及路由轉發(fā))都需要主機開啟ipv4轉發(fā)肴掷。
另外呆瞻,不使用k8s,即使只使用docker的時候买窟,以下兩種情況也依賴ipv4轉發(fā):

<1>當同一主機上的兩個跨bridge(跨bridge相當于跨網段,跨網絡需要路由)的容器互訪
<2>從容器內訪問外部

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

二学赛、安裝 kubelet,kubeadm,kubectl, cni-plugins

使用 kubeadm 來進行搭建
kubeadm 不會幫忙下載 kubelet kubectl,所以要先安裝好
cni-plugins 里包含眾多插件,如果不安裝攻晒, 配置網絡時萧芙,kubelet 會報 NetworkPlugin cni 錯誤

鏈接: https://pan.baidu.com/s/1K5rA3Di_uVgE96pK3tst4Q 提取碼: hm6r

chmod +x /usr/bin/kubeadm
chmod +x /usr/bin/kubelet
chmod +x /usr/bin/kubectl
cd /opt/cni/bin
tar -xvf cni-plugins-amd64-v0.7.4.tgz
rm -f cni-plugins-amd64-v0.7.4.tgz

三破喻、運行kubelet

kubelet 啟動默認值為Cgroup Driver 是 cgroupfs。查看kubelet的配置文件,如果是默認的cgroupfs,不需要修改姨夹。否則需要修改。

$ cat <<EOF > /etc/systemd/system/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/

[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

$ mkdir -p /etc/systemd/system/kubelet.service.d/

$ cat <<EOF > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
EOF

$ cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS=--cgroup-driver=cgroupfs --network-plugin=cni
$ cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=
$ systemctl daemon-reload
$ systemctl enable kubelet && systemctl restart kubelet
$ systemctl status kubelet -l

此時kubelet的服務運行狀態(tài)是異常的: code=exited, status=255 蓬豁。(因為缺少kubelet.conf等,可以暫不處理笑跛,在完成Master節(jié)點的初始化后會生成配置文件)

四聊品、server節(jié)點:初始化集群

1飞蹂、 導入 server 所需鏡像

tar -xvf k8s-images.tar
docker load < k8s-images/kube-apiserver.tar
docker load < k8s-images/coredns.tar
docker load < k8s-images/etcd.tar
docker load < k8s-images/kube-scheduler.tar
docker load < k8s-images/kube-controller-manager.tar
docker load < k8s-images/kube-proxy.tar
docker load < k8s-images/pause.tar

查看鏡像是否齊全

$ docker images -a
REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                                 v1.13.0             8fa56d18961f        34 hours ago        80.2MB
k8s.gcr.io/kube-scheduler                             v1.13.0             9508b7d8008d        34 hours ago        79.6MB
k8s.gcr.io/kube-apiserver                             v1.13.0             f1ff9b7e3d6e        34 hours ago        181MB
k8s.gcr.io/kube-controller-manager                    v1.13.0             d82530ead066        34 hours ago        146MB
k8s.gcr.io/coredns                                    1.2.6               f59dcacceff4        4 weeks ago         40MB
k8s.gcr.io/etcd                                       3.2.24              3cab8e1b9802        2 months ago        220MB
k8s.gcr.io/pause                                      3.1                 da86e6ba6ca1        11 months ago       742kB
quay.io/coreos/flannel                                v0.10.0-amd64       f0fad859c909        10 months ago       44.6MB

2、啟動集群

使用 flannel 搭建 pod 網絡翻屈,必須添加 –pod-network-cidr 參數(shù)重新啟動 kubernete 集群

kubeadm init --kubernetes-version=v1.13.0 --apiserver-advertise-address=10.127.24.179 --pod-network-cidr=10.244.0.0/16

看到如下信息說明啟動成功
Your Kubernetes master has initialized successfully!
記錄最后一行陈哑,node 加入集群時使用
kubeadm join xxx --token xxxxxx --discovery-token-ca-cert-hash sha256:yyyyyy

3、配置 master

作為 root 用戶

cat <<EOF >> ~/.bash_profile
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
source ~/.bash_profile

如果要給其他用戶調用 kubectl 的權限

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

(可選)設置 master 參與工作負載
kubeadm 初始化的集群伸眶,將 master 節(jié)點做了 taint惊窖,默認情況下 Pod 不會被調度到 master 上。
使用下面的命令去掉master的taint厘贼,使master參與工作負載:

kubectl taint nodes --all node-role.kubernetes.io/master-
node "xxxx" untainted

改回命令界酒,設置 master 不參與工作負載

kubectl taint nodes k8s node-role.kubernetes.io/master=true:NoSchedule

4、配置 flannel 網絡

kubectl apply -f kube-flannel.yml

output:
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created

5嘴秸、查看當前集群狀態(tài)

$ kubectl get componentstatus
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health": "true"}
$ kubectl get nodes
master : Ready
$ kubectl get pods -n kube-system
NAME                                                                            READY   STATUS    RESTARTS   AGE
coredns-86c58d9df4-j8t2t                                                        1/1     Running   0          6m20s
coredns-86c58d9df4-wr9sk                                                        1/1     Running   0          6m20s
etcd-k8s-master                      1/1     Running   0          5m32s
kube-apiserver-k8s-master            1/1     Running   0          5m43s
kube-controller-manager-k8s-master   1/1     Running   0          5m21s
kube-flannel-ds-amd64-st4sv                                                     1/1     Running   0          4m
kube-proxy-d7t4d                                                                1/1     Running   0          6m20s
kube-scheduler-k8s-master            1/1     Running   0          5m39s

五毁欣、Node 加入集群

1、按上述步驟一岳掐、二凭疮、三在 node 節(jié)點搭建環(huán)境

2、導入鏡像

tar -xvf k8s-images.tar
docker load < k8s-images/pause.tar
docker load < k8s-images/kube-proxy.tar
docker load < k8s-images/flannel.tar

3串述、加入集群

kubeadm join xxxxx --token xxxxx --discovery-token-ca-cert-hash sha256:xxxxxx

output:
This node has joined the cluster!

六执解、Master:check 集群節(jié)點狀態(tài)

$ kubectl get nodes
output:
NAME                                                    STATUS   ROLES    AGE   VERSION
k8s-master1   Ready    master   40h   v1.13.0
k8s-node1   Ready    <none>   17h   v1.13.0
k8s-node2               Ready    <none>   14s   v1.13.0
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纲酗,隨后出現(xiàn)的幾起案子衰腌,更是在濱河造成了極大的恐慌,老刑警劉巖耕姊,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桶唐,死亡現(xiàn)場離奇詭異,居然都是意外死亡茉兰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門欣簇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來规脸,“玉大人,你說我怎么就攤上這事熊咽∧迹” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵横殴,是天一觀的道長被因。 經常有香客問我卿拴,道長,這世上最難降的妖魔是什么梨与? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任堕花,我火速辦了婚禮,結果婚禮上粥鞋,老公的妹妹穿的比我還像新娘缘挽。我一直安慰自己,他們只是感情好呻粹,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布壕曼。 她就那樣靜靜地躺著,像睡著了一般等浊。 火紅的嫁衣襯著肌膚如雪腮郊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天筹燕,我揣著相機與錄音轧飞,去河邊找鬼。 笑死庄萎,一個胖子當著我的面吹牛踪少,可吹牛的內容都是我干的。 我是一名探鬼主播糠涛,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼援奢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忍捡?” 一聲冷哼從身側響起集漾,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砸脊,沒想到半個月后具篇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡凌埂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年驱显,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞳抓。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡埃疫,死狀恐怖,靈堂內的尸體忽然破棺而出孩哑,到底是詐尸還是另有隱情栓霜,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布横蜒,位于F島的核電站胳蛮,受9級特大地震影響销凑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜仅炊,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一斗幼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茂洒,春花似錦孟岛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至智哀,卻和暖如春次询,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓷叫。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工屯吊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人摹菠。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓盒卸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親次氨。 傳聞我的和親對象是個殘疾皇子蔽介,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內容