您好,登錄后才能下訂單哦!
本文介紹了如何通過Kubespray來進行部署高可用k8s集群,k8s版本為1.12.5。
代碼倉庫:https://github.com/kubernetes-sigs/kubespray
參考文檔:https://kubespray.io/#/
由于kubespray是依賴于ansible,ansible通過ssh協議進行主機之間的訪問,所以部署之前需要設置主機之間免密登錄,步驟如下:
ssh-keygen?-t?rsa scp?~/.ssh/id_rsa.pub?root@IP:/root/.ssh ssh?root@IP cat?/root/.ssh/id_rsa.pub?>>?/root/.ssh/authorized_keys
注意:不要通過使用github倉庫master分支的代碼,我這里使用的是tag v2.8.3進行部署
wget?https://github.com/kubernetes-sigs/kubespray/archive/v2.8.3.tar.gz tar?-xvf?v2.8.3cd?kubespray-v2.8.3
Kubernetes安裝大部分都是使用的國外的鏡像,由于防火墻原因沒有辦法獲取到這些鏡像,所以需要自己創建鏡像倉庫并將這些鏡像獲取到上傳到鏡像倉庫中。
鏡像倉庫我們選用的組件是Harbor,安裝步驟參考:
https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
在文件roles/download/defaults/main.yml文件中,可以看到使用的全量鏡像列表,注意某些鏡像由于功能未使用的原因所以暫時沒有用到,我們主要用到有如下鏡像:
使用的鏡像列表如下,在這里我申請了一臺國外的阿里云主機,在該臺主機下載所需鏡像然后上傳至私有鏡像倉庫
例如操作某個鏡像時,需要執行如下命令:
docker?pull?gcr.io/google_containers/kubernetes-dashboard-amd64:v1.10.0 docker?tag?gcr.io/google_containers/kubernetes-dashboard-amd64:v1.10.0?106.14.219.69:5000/google_containers/kubernetes-dashboard-amd64:v1.10.0 docker?push?106.14.219.69:5000/google_containers/kubernetes-dashboard-amd64:v1.10.0
在inventory/testcluster/group_vars/k8s-cluster/k8s-cluster.yml文件中添加如下配置:
#?kubernetes?image?repo?define kube_image_repo:?"10.0.0.183:5000/google_containers" ##?modified?by:?robbin #?comment:?將使?的組件的鏡像倉庫修改為私有鏡像倉庫地址 etcd_image_repo:?"10.0.0.183:5000/coreos/etcd" coredns_image_repo:?"10.0.0.183:5000/coredns" calicoctl_image_repo:?"10.0.0.183:5000/calico/ctl" calico_node_image_repo:?"10.0.0.183:5000/calico/node" calico_cni_image_repo:?"10.0.0.183:5000/calico/cni" calico_policy_image_repo:?"10.0.0.183:5000/calico/kube-controllers" hyperkube_image_repo:?"{{?kube_image_repo?}}/hyperkube-{{?image_arch?}}" pod_infra_image_repo:?"{{?kube_image_repo?}}/pause-{{?image_arch?}}" dnsautoscaler_image_repo:?"{{?kube_image_repo?}}/cluster-proportional-autoscaler-{{?image_arch?}}" dashboard_image_repo:?"{{?kube_image_repo?}}/kubernetes-dashboard-{{?image_arch?}}"
由于我們的私有鏡像倉庫未配置https證書,需要在 inventory/testcluster/group_vars/all/docker.yml文件中添加如下配置:
docker_insecure_registries: -?10.0.0.183:5000
由于默認從Docker官方源安裝docker,速度非常慢,這里我們更換為國內阿里源,在inventory/testcluster/group_vars/k8s-cluster/k8s-cluster.yml文件中添加如下配置:?
#?CentOS/RedHat?docker-ce?repo docker_rh_repo_base_url:'? docker_rh_repo_gpgkey:?'? dockerproject_rh_repo_base_url:'? dockerproject_rh_repo_gpgkey:?'https://mirrors.aliyun.com/docker-engine/yum/gpg'
3.2.2 可執行文件預處理
另外由于需要從google以及github下載一些可執行文件,由于防火墻原因無法直接在服務器上下載,我們可以預先將這些執行文件下載好,然后上傳到指定的服務器路徑中
可執行文件下載地址可以在roles/download/defaults/main.yml文件中查找到,下載路徑如下:
kubeadm_download_url:?"https://storage.googleapis.com/kubernetes-release/release/v1.12.5/bin/linux/amd64/kubeadm" hyperkube_download_url:?"https://storage.googleapis.com/kubernetes-release/release/v1.12.5/bin/linux/amd64/hyperkube" cni_download_url:?"https://github.com/containernetworking/plugins/releases/download/v0.6.0/cni-plugins-amd64-v0.6.0.tgz"
接下來修改文件權限,并上傳到每臺服務器的/tmp/releases目錄下
chmod?755?cni-plugins-amd64-v0.6.0.tgz?hyperkube?kubeadm scp?cni-plugins-amd64-v0.6.0.tgz?hyperkube?kubeadm?root@node1:/tmp/releases
3.3 組件列表
k8s所需要的組件
可選插件列表
k8s的服務發現依賴于DNS,涉及到兩種類型的網絡:主機網絡和容器網絡,所以Kubespray提供了兩種配置來進行管理
dns_mode 主要用于集群內的域名解析,有如下幾種類型,我們的技術選型是coredns,注意:選擇某種dns_mode,可能需要下載安裝多個容器鏡像,其鏡像版本也可能不同
resolvconf_mode主要用來解決當容器部署為host網絡模式的時候,如何使用k8s的dns,這里我們使用的是docker_dns
resolvconf_mode:?docker_dns
kube-proxy可以選擇ipvs或者iptables,在這里我們選擇的是ipvs模式,關于這兩者的區別可以參考?華為云在 K8S 大規模場景下的 Service 性能優化實踐(https://zhuanlan.zhihu.com/p/37230013)
網絡插件列表如下,我們的技術選型是calico,注意:選擇某種網絡插件,可能需要一個或多個容器鏡像,其鏡像版本也可能不同。
#?Install?dependencies?from?``requirements.txt`` sudo?pip?install?-r?requirements.txt #?Copy?`inventory/sample`?as?`inventory/mycluster` cp?-rfp?inventory/sample?inventory/mycluster #?Update?Ansible?inventory?file?with?inventory?builder declare?-a?IPS=(10.10.1.3?10.10.1.4?10.10.1.5) CONFIG_FILE=inventory/mycluster/hosts.ini?python3?contrib/invent ory_builder/invent ory.py?${IPS[@]} #?Review?and?change?parameters?under?`inventory/mycluster/group_vars` cat?inventory/mycluster/group_vars/all/all.yml cat?inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml #?Deploy?Kubespray?with?Ansible?Playbook?-?run?the?playbook?as?root #?The?option?`-b`?is?required,?as?for?example?writing?SSL?keys?in?/etc/, #?installing?packages?and?interacting?with?various?systemd?daemons. #?Without?-b?the?playbook?will?fail?to?run! ansible-playbook?-i?inventory/mycluster/hosts.ini?--become?--become-user=root?clus ter.yml
部署完成,可以登錄到k8s-master所在的主機,執行如下命令,可以看到各個組件正常
kubectl?cluster-info kubectl?get?node kubectl?get?pods?--all-namespaces
參考文檔:
https://github.com/kubernetes-sigs/kubespray/blob/master/docs/getting-started.md
https://xdatk.github.io/2018/04/16/kubespray2/
https://jicki.me/kubernetes/docker/2018/12/21/k8s-1.13.1-kubespray/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。