使用kargo 安裝kubernetes 1.5.3 高可用環(huán)境(centos)

前提

  • centos 7.2/7.3
  • ansible 2.2.1及以上
  • ssh免密登錄(建立操作服務(wù)器到目標(biāo)服務(wù)器)
  • /etc/resolv.conf 中 nameserver 不超過(guò)3個(gè)
  • 不要使用系統(tǒng)默認(rèn)的docker,增加如下repo
[xzx@cloud4ourself-kgo1 ~]$ cat /etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg


yum install docker-engine -y

參考https://yq.aliyun.com/articles/29941 增加阿里云加速器,否則安裝過(guò)程時(shí)間很長(zhǎng)

  • 升級(jí)jinja2
yum install -y python-netaddr
pip install --upgrade Jinja2

安裝

  • 下載
    該庫(kù)已經(jīng)將gcr.io 和 部分 quay.io 的源改為docker.io,這樣可以利用阿里云加速,解決無(wú)法訪問(wèn)問(wèn)題
git clone https://github.com/4admin2root/kargo
  • 修改ansible資產(chǎn)文件
    inventory/inventory.example:將主機(jī)kgo[1-4]改為實(shí)際情況

  • 執(zhí)行安裝

ansible-playbook -i inventory/inventory.example cluster.yml -vvvv
  • 結(jié)果
result.png

測(cè)試

kubectl create -f https://raw.githubusercontent.com/4admin2root/daocloud/master/my-calc.yaml
kubectl create -f https://raw.githubusercontent.com/4admin2root/daocloud/master/my-frontend.yaml
kubectl run busybox --image=busybox -- sleep 3600
kubectl exec -it `kubectl get pod |grep busybox|awk '{print $1}'` -- sh
/ # nslookup my-frontend-service
Server:    10.233.0.2
Address 1: 10.233.0.2

Name:      my-frontend-service
Address 1: 10.233.40.222
/ # wget --post-data="x=1&y=2&submit=addition"  -O foo http://my-frontend-service:5000/add
Connecting to my-frontend-service:5000 (10.233.40.222:5000)
foo                  100% |*********************************************************************************************************************|   232   0:00:00 ETA
/ # cat foo
<html>
<body>
<div>
<form method="post" action="/add">
<input type="text" name="x" size="2"/>
<input type="text" name="y" size="2"/>
<input type="submit" value="addition"/>
</form>

<p>Answer : 1 + 2 = 3
</p>

</div>
</body>
/ #

問(wèn)題

  • 報(bào)錯(cuò)
TASK [vault : test] ************************************************************
task path: /usr/local/lvzj/github/kargo/roles/vault/tasks/shared/check_vault.yml:27
Monday 20 March 2017  17:47:59 +0800 (0:00:00.034)       0:00:37.293 **********

TASK [vault : debug] ***********************************************************
task path: /usr/local/lvzj/github/kargo/roles/vault/tasks/shared/check_vault.yml:31
Monday 20 March 2017  17:47:59 +0800 (0:00:00.034)       0:00:37.328 **********

TASK [vault : check_vault | Set fact about the Vault cluster's initialization state] ***
task path: /usr/local/lvzj/github/kargo/roles/vault/tasks/shared/check_vault.yml:34
Monday 20 March 2017  17:47:59 +0800 (0:00:00.037)       0:00:37.365 **********
fatal: [kg2]: FAILED! => {
    "failed": true,
    "msg": "'dict object' has no attribute 'vault'"
}
fatal: [kg1]: FAILED! => {
    "failed": true,
    "msg": "'dict object' has no attribute 'vault'"
}

解決辦法:升級(jí)ansible的版本

  • 如使用ceph 會(huì)存在rbd報(bào)錯(cuò)
Events:
  FirstSeen    LastSeen    Count    From                SubObjectPath    Type        Reason        Message
  ---------    --------    -----    ----                -------------    --------    ------        -------
  16h        1m        498    {kubelet cloud4ourself-kg3}            Warning        FailedMount    MountVolume.SetUp failed for volume "kubernetes.io/rbd/a1211922-0ee9-11e7-8784-fa163e2dc2d7-pvc-9b0b20fa-0ee1-11e7-8784-fa163e2dc2d7" (spec.Name: "pvc-9b0b20fa-0ee1-11e7-8784-fa163e2dc2d7") pod "a1211922-0ee9-11e7-8784-fa163e2dc2d7" (UID: "a1211922-0ee9-11e7-8784-fa163e2dc2d7") with: rbd: failed to modprobe rbd error:exit status 1
  16h        26s        447    {kubelet cloud4ourself-kg3}            Warning        FailedMount    Unable to mount volumes for pod "mysql-1_default(a1211922-0ee9-11e7-8784-fa163e2dc2d7)": timeout expired waiting for volumes to attach/mount for pod "default"/"mysql-1". list of unattached/unmounted volumes=[data]
  16h        26s        447    {kubelet cloud4ourself-kg3}            Warning        FailedSync    Error syncing pod, skipping: timeout expired waiting for volumes to attach/mount for pod "default"/"mysql-1". list of unattached/unmounted volumes=[data]

需要在所有節(jié)點(diǎn)配置安裝ceph-common,并配置/etc/ceph/ keyring 和 ceph.conf

還需改變kubelet 容器的啟動(dòng)參數(shù),sudo vim /usr/local/bin/kubelet
增加

  -v /sbin/modprobe:/sbin/modprobe:ro \
  -v /lib/modules:/lib/modules:ro \
  -v /etc/ceph:/etc/ceph:ro \

安裝失敗手動(dòng)清理

rm -rf /etc/kubernetes/
rm -rf /var/lib/kubelet
rm -rf /var/lib/etcd
rm -rf /usr/local/bin/kubectl
rm -rf /etc/systemd/system/calico-node.service
rm -rf /etc/systemd/system/kubelet.service
systemctl stop etcd.service
systemctl disable etcd.service
systemctl stop calico-node.service
systemctl disable calico-node.service
service docker restart

參考

https://github.com/kubernetes-incubator/kargo#requirements
https://www.xf80.com/2017/03/13/kargo-kubernetes-1.5.4/
https://github.com/kubernetes/kubernetes/issues/23924

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容