一 kubernetes
以下介紹摘自Wiki
Kubernetes (通常稱(chēng)為K8s) 是用于自動(dòng)部署例诀、擴(kuò)展和管理容器化(containerized)應(yīng)用程序的開(kāi)源系統(tǒng)抢韭。Google設(shè)計(jì)并捐贈(zèng)給Cloud Native Computing Foundation(今屬Linux基金會(huì))來(lái)使用的。它旨在提供“跨主機(jī)集群的自動(dòng)部署鸠踪、擴(kuò)展以及運(yùn)行應(yīng)用程序容器的平臺(tái)”缔莲。它支持一系列容器工具, 包括Docker等。
本文主要介紹如何使用kubeadm快速搭建K8s集群環(huán)境扎唾,讓你迅速體驗(yàn)學(xué)習(xí)Kubernetes召川。
更多內(nèi)容查閱官網(wǎng)K8s.io
二 實(shí)驗(yàn)環(huán)境
硬件
宿主機(jī):Win10 + Virtualbox
虛擬機(jī):2核4g + 橋接網(wǎng)卡
主機(jī)名 | 系統(tǒng) | IP |
---|---|---|
master.k8s | CentOS 7.4 x86_64 | 192.168.1.100 |
node1.k8s | CentOS 7.4 x86_64 | 192.168.1.101 |
node2.k8s | CentOS 7.4 x86_64 | 192.168.1.102 |
軟件
軟件包 | 版本 |
---|---|
kubeadm | v1.8.4 |
kubelet | v1.8.4 |
kubectl | v1.8.4 |
kubernetes-cni | 0.5.1 |
docker | 1.12.6 |
上述安裝包已經(jīng)上傳百度云,下載鏈接: https://pan.baidu.com/s/1c2NJADy 密碼: dfgq
鏡像
Kubeadm初始化中會(huì)從gcr.io中下載很多鏡像胸遇。如果是在國(guó)內(nèi)(無(wú)奈的FUC~K)荧呐,只得另辟蹊徑,自找出路纸镊。我是將鏡像同步到了Docker Hub倍阐,然后從docker hub 下載,再tag回來(lái)逗威。
鏡像名稱(chēng) | 倉(cāng)庫(kù) | 備注 |
---|---|---|
kube-proxy-amd64:v1.8.4 | gcr.io/google_containers/ | FQ |
kube-scheduler-amd64:v1.8.4 | gcr.io/google_containers/ | FQ |
kube-controller-manager-amd64:v1.8.4 | gcr.io/google_containers/ | FQ |
kube-apiserver-amd64:v1.8.4 | gcr.io/google_containers/ | FQ |
etcd-amd64:3.0.17 | gcr.io/google_containers/ | FQ |
k8s-dns-sidecar-amd64:1.14.5 | gcr.io/google_containers/ | FQ |
pause-amd64:3.0 | gcr.io/google_containers/ | FQ |
k8s-dns-kube-dns-amd64:1.14.5 | gcr.io/google_containers/ | FQ |
k8s-dns-dnsmasq-nanny-amd64:1.14.5 | gcr.io/google_containers/ | FQ |
flannel:v0.9.1-amd64 | quay.io/coreos | 正常訪(fǎng)問(wèn) |
三 all節(jié)點(diǎn)
下列操作在所有節(jié)點(diǎn)以root用戶(hù)執(zhí)行峰搪。
3.1 更新系統(tǒng)
yum makecache fast
yum -y update
3.2 停用SWAP分區(qū)
臨時(shí)停止,重啟無(wú)效:
# swapoff -a
永久關(guān)閉:
1. 刪除SWAP分區(qū)
2. 修改/etc/default/grub,找到GRUB_CMDLINE_LINUX并刪除swap
3. 備份/etc/grub2.cfg
4. 重新生成/etc/grub2.cfg
3.3 關(guān)閉SELinux
臨時(shí)停止凯旭,重啟無(wú)效:
# setenforce 0
永久關(guān)閉:
修改/etc/selinux/config概耻,然后重啟系統(tǒng)。
3.4 設(shè)置內(nèi)核參數(shù)
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
3.5 安裝kubeadm等包
將下載好的包上傳至系統(tǒng)目錄罐呼,這里是/opt/soft/
執(zhí)行安裝命令:yum localinstall -y /opt/soft/*.rpm
3.6 開(kāi)啟firewalld
systemctl restart firewalld
systemctl enable firewalld
3.7 加速docker pull
由于大部分源都在國(guó)外鞠柄,國(guó)內(nèi)下載體驗(yàn)很不好,所以需要設(shè)置docker加速器弄贿。
常用的有:
這里使用Daocloud
3.8 調(diào)整kubelet啟動(dòng)參數(shù)
這一步很關(guān)鍵春锋,在沒(méi)有調(diào)整kubelet啟動(dòng)參數(shù)之前,我初始化K8s cluster后差凹,在 /var/log/message 中頻繁出現(xiàn)以下錯(cuò)誤信息:
Nov 28 09:29:03 k8s kubelet: E1128 09:29:03.679613 6485 summary.go:92] Failed to get system container stats for "/system.slice/kubelet.service": failed to get cgroup stats for "/system.slice/kubelet.service": failed to get container info for "/system.slice/kubelet.service": unknown container "/system.slice/kubelet.service"
Nov 28 09:29:03 k8s kubelet: E1128 09:29:03.679651 6485 summary.go:92] Failed to get system container stats for "/system.slice/docker.service": failed to get cgroup stats for "/system.slice/docker.service": failed to get container info for "/system.slice/docker.service": unknown container "/system.slice/docker.service"
Nov 28 09:29:03 k8s kubelet: W1128 09:29:03.679695 6485 helpers.go:847] eviction manager: no observation found for eviction signal allocatableNodeFs.available
后來(lái)在 stackoverflow 上找到了同問(wèn)題的解決辦法期奔,就是調(diào)整啟動(dòng)參數(shù):
編輯配置文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
新增: Environment="KUBELET_MY_ARGS=--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"
修改ExecStart: 在末尾新增 $KUBELET_MY_ARGS
3.9 下載鏡像
從docker hub中下載所需鏡像,并重新tag
images=(kube-proxy-amd64:v1.8.4 kube-scheduler-amd64:v1.8.4 kube-controller-manager-amd64:v1.8.4 kube-apiserver-amd64:v1.8.4 etcd-amd64:3.0.17 k8s-dns-sidecar-amd64:1.14.5 pause-amd64:3.0 k8s-dns-kube-dns-amd64:1.14.5 k8s-dns-dnsmasq-nanny-amd64:1.14.5)
for imageName in ${images[@]} ; do
docker pull yotoobo/$imageName
docker tag yotoobo/$imageName gcr.io/google_containers/$imageName
docker rmi yotoobo/$imageName
done
3.10 修改/etc/hosts
由于沒(méi)有內(nèi)網(wǎng)dns服務(wù)危尿,所以這里使用hosts文件呐萌。
添加以下內(nèi)容到/etc/hosts
192.168.1.100 master.k8s
192.168.1.101 node1.k8s
192.168.1.102 node2.k8s
四 master節(jié)點(diǎn)
下列操作在master節(jié)點(diǎn)以root用戶(hù)執(zhí)行。
4.1 允許指定端口訪(fǎng)問(wèn)
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
端口作用:
端口 | 目的 |
---|---|
6443 | kube-apiserver |
2379-2380 | etcd server client API |
10250 | kubelet api |
10251 | kube-scheduler |
10252 | kube-controller-manager |
10255 | Read-only Kubelet API |
4.2 啟動(dòng)服務(wù)
systemctl enable kubelet && systemctl restart kubelet
systemctl enable docker && systemctl restart docker
4.3 kubeadm 初始化
kubeadm init --kubernetes-version=v1.8.4 --token-ttl 0 --pod-network-cidr=10.244.0.0/16
--kubernetes-version=v1.8.4 :不指定會(huì)去google獲取版本信息谊娇,所以你懂的~~~
--token-ttl 0 :token永不過(guò)期肺孤,不指定默認(rèn)24h后過(guò)期
--pod-network-cidr=10.244.0.0/16 :如果要正常使用Flannel,則確保使用此配置
接著等待初始化完成
如果看到提示1,則說(shuō)明初始化成功,恭喜赠堵,你已經(jīng)成功了90%了小渊。
按照提示2執(zhí)行對(duì)應(yīng)操作。
提示3則非常重要了茫叭,要妥善保存好酬屉,以后添加node機(jī)到K8s集群就需要它了。
4.4 安裝Flannel
K8s有許多可選的Pod Network揍愁,這里選擇Coreos的Flannel呐萨。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
4.5 查看master狀態(tài)
五 nodes節(jié)點(diǎn)
下列操作在nodes節(jié)點(diǎn)以root用戶(hù)執(zhí)行。
5.1 允許指定端口
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
30000-32767為NodeService的默認(rèn)端口
5.2 啟動(dòng)服務(wù)
systemctl enable kubelet && systemctl restart kubelet
systemctl enable docker && systemctl restart docker
5.3 kubeadm join
使用步驟4.3中的提示3莽囤,將nodes節(jié)點(diǎn)添加到K8s集群中谬擦。
最后
至此,我們借助Kubeadm搭建了一套3節(jié)點(diǎn)的集群環(huán)境朽缎,不過(guò)需要指出的是Kubeadm還是一個(gè)beta版工具惨远,還不建議在生產(chǎn)環(huán)境中使用。因?yàn)閙aster節(jié)點(diǎn)饵沧、etcd锨络、kube-apiserver等都還屬于單節(jié)點(diǎn)赌躺。
現(xiàn)在狼牺,回到master機(jī)器上,再來(lái)驗(yàn)證下K8s環(huán)境:
在創(chuàng)建一個(gè)簡(jiǎn)單的Pod:
cat >> /opt/k8s/myapp-pod.yml << EOF
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
EOF
kubectl apply -f /opt/k8s/myapp-pod.yml
驗(yàn)證:
K8s還有許許多多的特性和功能礼患,在深入學(xué)習(xí)中你會(huì)發(fā)現(xiàn)K8s是如此的強(qiáng)大而富有魅力是钥。
奔跑的K8s!C宓悄泥!
同時(shí)此文章也發(fā)布在了我的個(gè)人博客,希望大家可以多多光顧。