真快!10秒内将k8s集群运行起来
大家好,我是小碗湯,今天演示一個(gè)項(xiàng)目,可以在一分鐘內(nèi)用容器將k8s集群運(yùn)行起來,真的很方便。
您可能已經(jīng)知道,將 Kubernetes 集群安裝在 VM 上。但在 Docker 容器中安裝一個(gè) Kubernetes 集群,還沒有太多的實(shí)踐。
本文我將簡(jiǎn)要演示如何在 Docker 容器中創(chuàng)建 Kubernetes 集群。如果你想看細(xì)節(jié),可以查看 GitHub倉庫[1]。
創(chuàng)建集群
下載腳本
git?clone?--depth=1?[https://github.com/ManasPecenek/clinco.git](https://github.com/ManasPecenek/clinco.git?"https://github.com/ManasPecenek/clinco.git")?&&?cd?clinco?&&?chmod?+x?initial-script.sh?add-worker.sh查看目錄結(jié)構(gòu)
#?ls? add-worker.sh??initial-script.sh??LICENSE??master?image??README.md??worker?image現(xiàn)在您可以設(shè)置工作節(jié)點(diǎn)數(shù),然后運(yùn)行腳本。例如./initial-script.sh 1將產(chǎn)生一個(gè) worker-node 集群:
./initial-script.sh?<worker-node-count>稍等片刻,即可看到1 master 1 worker集群創(chuàng)建好了:
#?docker?ps?-a CONTAINER?ID???IMAGE??????????????????????????????COMMAND????????CREATED??????????STATUS??????????PORTS??????????????????????????????????????????????????????????????????????????NAMES 7521c916e92e???petschenek/ubuntu-systemd:worker???"/sbin/init"???11?minutes?ago???Up?11?minutes??????????????????????????????????????????????????????????????????????????????????worker-1 a2e5bcf92c92???petschenek/ubuntu-systemd:master???"/sbin/init"???15?minutes?ago???Up?15?minutes???0.0.0.0:80->80/tcp,?:::80->80/tcp,?0.0.0.0:6443->6443/tcp,?:::6443->6443/tcp???mastermaster會(huì)將80、6443端口映射到宿主機(jī)上。
我們將容器中的kubectl命令復(fù)制到宿主機(jī)上,方便操作:
#?docker?cp?master:/usr/local/bin/kubectl?/usr/local/bin/在clinco目錄中默認(rèn)存在了admin.kubeconfig文件,我們查看集群:
#?kubectl?get?nodes?-o?wide?--kubeconfig?admin.kubeconfig NAME???????STATUS???ROLES????AGE???VERSION???INTERNAL-IP???EXTERNAL-IP???OS-IMAGE???????KERNEL-VERSION????????????????CONTAINER-RUNTIME worker-1???Ready????<none>???29m???v1.21.0???172.172.1.1???<none>????????Ubuntu?21.10???3.10.0-1160.31.1.el7.x86_64???containerd://1.5.8#?kubectl?cluster-info?--kubeconfig?admin.kubeconfig Kubernetes?control?plane?is?running?at?https://127.0.0.1:6443To?further?debug?and?diagnose?cluster?problems,?use?'kubectl?cluster-info?dump'.添加工作節(jié)點(diǎn)
運(yùn)行下面的腳本,例如./add-worker.sh 1 將向現(xiàn)有集群添加1個(gè)工作節(jié)點(diǎn):
./add-worker.sh?<worker-node-count>查看添加的節(jié)點(diǎn):
#?docker?ps?-a CONTAINER?ID???IMAGE??????????????????????????????COMMAND????????CREATED??????????STATUS??????????PORTS??????????????????????????????????????????????????????????????????????????NAMES bfc68af79191???petschenek/ubuntu-systemd:worker???"/sbin/init"???14?seconds?ago???Up?13?seconds??????????????????????????????????????????????????????????????????????????????????worker-2 7521c916e92e???petschenek/ubuntu-systemd:worker???"/sbin/init"???33?minutes?ago???Up?33?minutes??????????????????????????????????????????????????????????????????????????????????worker-1 a2e5bcf92c92???petschenek/ubuntu-systemd:master???"/sbin/init"???36?minutes?ago???Up?36?minutes???0.0.0.0:80->80/tcp,?:::80->80/tcp,?0.0.0.0:6443->6443/tcp,?:::6443->6443/tcp???master稍等片刻,節(jié)點(diǎn)會(huì)變成Ready:
#?kubectl?get?nodes?-o?wide?--kubeconfig?admin.kubeconfig NAME???????STATUS???ROLES????AGE???VERSION???INTERNAL-IP???EXTERNAL-IP???OS-IMAGE???????KERNEL-VERSION????????????????CONTAINER-RUNTIME worker-1???Ready????<none>???33m???v1.21.0???172.172.1.1???<none>????????Ubuntu?21.10???3.10.0-1160.31.1.el7.x86_64???containerd://1.5.8 worker-2???Ready????<none>???38s???v1.21.0???172.172.1.2???<none>????????Ubuntu?21.10???3.10.0-1160.31.1.el7.x86_64???containerd://1.5.8為了方便,可以設(shè)置環(huán)境變量,或者將admin.kubeconfig復(fù)制到~/.kube/config文件中,這里設(shè)置個(gè)KUBECONFIG環(huán)境變量:
export?KUBECONFIG=admin.kubeconfig部署服務(wù)
部署2個(gè)實(shí)例的nginx deployment做測(cè)試:
kubectl?create?deploy?nginx?--image?nginx?--replicas?4稍等片刻即可啟動(dòng)成功:
#?kubectl??get?pod??-o?wide NAME?????????????????????READY???STATUS??????????????RESTARTS???AGE?????IP???????NODE???????NOMINATED?NODE???READINESS?GATES nginx-6799fc88d8-b5xhx???1/1?????Running???0??????????2m10s???<none>???worker-2???<none>???????????<none> nginx-6799fc88d8-ch2x9???1/1?????Running???0??????????2m10s???<none>???worker-2???<none>???????????<none>修復(fù)集群
如果使用delete node命令刪除節(jié)點(diǎn)后,例如:
kubectl??delete?node?worker-2則直接執(zhí)行以下命令重啟容器即可:
docker?restart?worker-2如果容器被刪除,刪除的是主節(jié)點(diǎn),想恢復(fù)集群,可以運(yùn)行以下命令:
#?docker?stop?master?;?docker?rm?master #?docker?run?-dt?--network?clinco?--hostname?master?--name?master?-v?master:/root?-v?etcd:/lib/etcd?-v?/sys/fs/cgroup:/sys/fs/cgroup:ro?--ip=172.172.0.1?-p?6443:6443?-p?80:80?--privileged?--user?root?petschenek/ubuntu-systemd:master?&&?docker?exec?-it?--privileged?--user?root?master?bash?-c?"./master.sh"如果容器被刪除,刪除的是工作節(jié)點(diǎn)之一(例如worker-2),可以運(yùn)行以下命令來重新創(chuàng)建:
#?docker?stop?worker-2?;?docker?rm?worker-2 #?j=2?&&?docker?run?-dt?--network?clinco?--hostname?worker-$j?--name?worker-$j?-v?/lib/modules:/lib/modules:ro?-v?worker-$j:/root?-v?/sys/fs/cgroup:/sys/fs/cgroup:ro?--ip=172.172.0.$j?--privileged?--user?root?petschenek/ubuntu-systemd:worker?&&?docker?exec?-it?--privileged?--user?root?worker-$j?bash?-c?"./worker.sh"原理
其實(shí)在master node容器中運(yùn)行了系統(tǒng)組件:
#?docker?exec?-ti?master?ps?-ef??|?grep?kube root????????1452???????1??3?13:10??????????00:01:33?/usr/local/bin/kube-apiserve root????????1453???????1??0?13:10??????????00:00:21?/usr/local/bin/kube-controll root????????1454???????1??0?13:10??????????00:00:05?/usr/local/bin/kube-schedule #?docker?exec?-ti?master?ps?-ef??|?grep?etcd root????????1367???????1??1?13:10??????????00:00:29?/usr/local/bin/etcd?--name?m在worker node容器中運(yùn)行了kubelet:
#?docker?exec?-ti?worker-1?ps?-ef??|?grep?kubelet root?????????980???????1??0?13:11??????????00:00:20?/usr/local/bin/kubelet?--con#?docker?exec?-ti?worker-2?ps?-ef??|?grep?kubelet root?????????981???????1??0?13:44??????????00:00:05?/usr/local/bin/kubelet?--con因?yàn)樵趍aster node容器中沒有運(yùn)行kubelet,所以查看node時(shí)看不到master。
容器網(wǎng)絡(luò)都為clinco模式:
#?docker?network??ls?-f?name=clinco NETWORK?ID?????NAME??????DRIVER????SCOPE 5d018b1d9b06???clinco????bridge????local#?docker?inspect?master?|?grep?NetworkMode"NetworkMode":?"clinco", #?docker?inspect?worker-1?|?grep?NetworkMode"NetworkMode":?"clinco", #?docker?inspect?worker-2?|?grep?NetworkMode"NetworkMode":?"clinco",數(shù)據(jù)也是掛載到宿主機(jī)上的:
#?docker?volume?ls?-f?name=etcd DRIVER????VOLUME?NAME local?????etcd總結(jié)
這里用到兩個(gè)鏡像(master、worker各一個(gè)),我們可以在10秒內(nèi)輕松裝好一個(gè) Kubernetes 集群,平時(shí)測(cè)試用起來將變得方便快捷。
參考
[1]
GitHub倉庫: https://github.com/ManasPecenek/clinco
點(diǎn)個(gè)在看你最好看
總結(jié)
以上是生活随笔為你收集整理的真快!10秒内将k8s集群运行起来的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET6之MiniAPI(九):基于角
- 下一篇: 为什么中国这么多高薪程序员,开发不出Ja