Kubernetes1.5新特性(三):新版本kubeadm部署
下面介紹的內容會展示如何在Ubuntu 16.04、 7和HypriotOS v1.0.1+作業系統上部署一套安全的Kubernetes叢集。下面介紹的安裝方式是透過kubeadmin工具來完成的,這個工具在Kubernetes1.4的時候就已經被增加到Kubernetes釋出包中了。 |
可以在本地虛擬機器、物理機或者其他雲服務提供商的IaaS資源上來使用kubeadmin安裝Kubernetes。也可以很容易將kubeadmin整合到Terraform、 Chef、Puppet等自動化工具中。對於kubeadmin所有 行資訊介紹,可以參考。
在Kubernetes1.5中,Kubeadmin工具還是阿爾法版本,也就是說大家可以在研發測試環境中使用,特別需要注意的地方是kubeadmin還不能全面支援自動配置雲服務提供商IaaS資源。如果在雲服務提供商IaaS資源上部署,那麼需要參考雲服務提供商的技術文件。
Kubeadm被設計成針對大規模叢集部署環境中使用的,當然也可以很容易的手動安裝。如果在你自己IaaS基礎架構上或者已經存在的自動化系統上部署Kubernetes,kubeadm是一個很好的選擇。
有多臺虛擬機器或者物理機,上面作業系統是Ubuntu 16.04+、CentOS 7或者HypriotOS v1.0.1+。
每臺主機上面至少1G記憶體。
所有主機之間網路可達。
在指定的主機上安裝一套安全的Kubernetes叢集。
在叢集上安裝一個POD網路,用來允許POD之間相互通訊。
在Kubernetes叢集上部署一個微服務應用樣例。
在主機上安裝下面軟體包:
docker:建議安裝v1.11.2版本版本,v1.10.3版本和v1.12.1版本也可以。
kubelet:安裝v1.5版本
kubectl: 安裝v1.5版本
kubeadm: 安裝v1.5版本
需要注意的是,如果主機上已經安裝了kubeadm,那麼需要更新成Kubernetes對應的v1.5版本。
按照下面順序來配置主機:
SSH登入到主機上,並且切換成root使用者。
如果主機是Ubuntu或者HypriotOS,那麼執行 :
curl -s| apt-key add - cat </etc/apt/sources.list.d/kubernetes.list deb EOF apt-get update apt-get install -y docker.io apt-get install -y kubelet kubeadm kubectl kubernetes-cni
如果主機是CentOS作業系統,那麼執行命令:
cat </etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl= enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey= EOF setenforce 0 yum install -y docker kubelet kubeadm kubectlkubernetes-cni systemctl enable docker && systemctl start docker systemctl enable kubelet && systemctl startkubelet
執行完上述命令後,kubelet會進入重啟迴圈模式,每隔幾秒鐘就會重啟,kubelte這時候再等待執行kubeadm發出的命令。
需要注意的是,需要禁用SE ,比如透過setenforce0命令。禁用的目的是讓容器可以讀取主機檔案系統,以便了解如何配置POD網路。
Kubernetes的master節點上執行著etcd和api server等元件,所有這些元件都需要透過kubelet啟動。
在解除安裝kubernetes前,不要執行兩次kubeadm init命令。
如果已經執行了kubeadm init命令,導致主機狀態同kuberentes叢集狀態不相容,這時候kubeadm會傳送告警資訊,提示目前不能正常工作,因為不滿足強制要求。
可以透過下面命令初始化master節點:
# kubeadm init
需要注意的是:這個操作會自動發現網路卡裝置,並且將master節點上網路卡裝置設定成預設閘道器。如果想使用另外的網路卡裝置,那麼需要在執行kubeadminit命令時增加引數–api-advertise-addresses=
如果你想使用flannel搭建POD網路,需要增加引數–pod-network-cidr=10.244.0.0/16。如果不適用flannel,那麼就不需要這麼做了。
可以參考kubeadm指南,在這裡面可以看到更詳細的kubeadmin init引數。
執行完kubeadm init命令後將會花幾分鐘自動下載並且安裝kubernetes叢集控制元件。
下面是命令執行後的輸出內容:
[kubeadm] WARNING: kubeadm is in alpha, please do not useit for production clusters. [preflight] Running pre-flight checks [init] Using Kubernetes version: v1.5.1 [tokens] Generated token:"064158.548b9ddb1d3fad3e" [certificates] Generated Certificate Authority key andcertificate. [certificates] Generated API Server key and certificate [certificates] Generated Service Account signing keys [certificates] Created keys and certificates in"/etc/kubernetes/pki" [kubeconfig] Wrote KubeConfig file to disk:"/etc/kubernetes/kubelet.conf" [kubeconfig] Wrote KubeConfig file to disk:"/etc/kubernetes/admin.conf" [apiclient] Created API client, waiting for the controlplane to become ready [apiclient] All control plane components are healthyafter 61.317580 seconds [apiclient] Waiting for at least one node to register andbecome ready [apiclient] First node is ready after 6.556101 seconds [apiclient] Creating a test deployment [apiclient] Test deployment succeeded [token-discovery] Created the kube-discovery deployment,waiting for it to become ready [token-discovery] kube-discovery is ready after 6.020980seconds [addons] Created essential addon: kube-proxy [addons] Created essential addon: kube-dns Your Kubernetes master has initialized successfully! You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" withone of the options listed at: You can now join any number of machines by running thefollowing on each node: kubeadm join --token=
在kubeadm join命令中,需要輸入token引數,透過token引數可以確保將被授權的節點新增到kubernetes叢集中,透過token引數來保證安全。
如果不在乎安全,比如安裝一個單機的kubernetes開發環境,那麼可以執行如下命令:
# kubectl taint nodes --all dedicated- node "test-01" tainted taint key="dedicated" and effect=""not found. taint key="dedicated" and effect=""not found.
在部署應用和啟動kube-dns之前,需要部署POD網路,需要注意的是kubeadm只是支援基於CNI的網路,因此基於kubenet的網路不會正常工作。
可以從下面網頁瞭解kubernetes支援的網路外掛,。
可以透過下面命令部署POD網路:
# kubectl apply -f
對於不同的網路外掛,需要參考指定的網路外掛安裝指南。需要注意的是每個kuberentes叢集只能部署一種POD網路。一旦部署完,需要檢查kube-dns POD是否執行,透過命令kubectl get pods –all-namespaces的輸出來確認網路是否正常工作。
一旦kube-dns POD正常執行了,可以向kubernetes叢集中新增工作節點。
為了將工作節點新增到kubernetes叢集中,對每個工作節點主機,都需要SSH到這個主機上,並且切換到root使用者,然後執行命令:
# kubeadm join --token[kubeadm] WARNING: kubeadm is in alpha, please do not useit for production clusters. [preflight] Running pre-flight checks [preflight] Starting the kubelet service [tokens] Validating provided token [discovery] Created cluster info discovery client,requesting info from"http://192.168.x.y:9898/cluster-info/v1/?token-id=f11877" [discovery] Cluster info object received, verifyingsignature using given token [discovery] Cluster info signature and contents arevalid, will use API endpoints [https://192.168.x.y:6443] [bootstrap] Trying to connect to endpointhttps://192.168.x.y:6443 [bootstrap] Detected server version: v1.5.1 [bootstrap] Successfully established connection withendpoint "https://192.168.x.y:6443" [csr] Created API client to obtain unique certificate forthis node, generating keys and certificate signing request [csr] Received signed certificate from the API server: Issuer: CN=kubernetes | Subject: CN=system:node:yournode| CA: false Not before: 2016-12-15 19:44:00 +0000 UTC Not After:2017-12-15 19:44:00 +0000 UTC [csr] Generating kubelet configuration [kubeconfig] Wrote KubeConfig file to disk:"/etc/kubernetes/kubelet.conf" Node join complete: * Certificate signing request sent to master and response received. * Kubelet informed of new secure connection details. Run 'kubectl get nodes' on the master to see this machinejoin.
新增完成後,在master節點上執行命令kubectl getnodes,會顯示所有已經新增到叢集中的節點主機。
(可選步驟)不在master節點上操作叢集,而是在其他工作節點上操作叢集
需要將master節點上面的kubernetes配置檔案複製到當前節點上,然後執行kubectl命令:
# scp root@:/etc/kubernetes/admin.conf . # kubectl --kubeconfig ./admin.conf get nodes
(可選步驟)連線到API Serer元件上
如果已經部署了dashboard,那麼可以從叢集外部連線到APIServer元件上,然後檢視dashboard:
# scp root@:/etc/kubernetes/admin.conf . # kubectl --kubeconfig ./admin.conf proxy 可以在本地訪問API Server
(可選步驟)部署樣例應用
上面已經部署完成了一套kubernetes環境,下面部署一個電商微服務應用。
# kubectl create namespace sock-shop # kubectl apply -n sock-shop -f "
然後檢視分配給樣例應用的服務資訊:
# kubectl describe svc front-end -n sock-shop Name: front-end Namespace: sock-shop Labels: name=front-end Selector: name=front-end Type: NodePort IP: 100.66.88.176 Port:80/TCP NodePort:31869/TCP Endpoints:Session Affinity: None
經過幾分鐘,會下載h額啟動樣例應用所需容器,然後就可以透過命令kubectlget pods -n sock-shop的輸出檢視樣例應用POD詳細資訊
進入到Kubernetes叢集的master節點上,透過瀏覽器訪問。在上面這個例子中,埠是31869,這個埠可以透過命令kubectl describe查詢出來。
如果有防火牆,那麼確保這個埠可以被訪問到。
透過在master節點上執行命令kubectl delete namespace sock-shop 來解除安裝這個樣例應用。
可以透過下面命令重置kubeadm工具:
# kubeadm reset
如果想重新開始,那麼依次執行命令systemctl start kubelet、kubeadm init和kubeadm join。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2641260/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes1.5新特性(二):支援Photon卷外掛
- 【新版本特性】SinoDB V16.8 版本新特性
- Kubernetes1.5新特性(一):Kubelet API增加認證和授權能力API
- Oracle11新特性——PLSQL新特性(三)OracleSQL
- C++11新特性(三):語言特性C++
- 【MySQL】5.7新特性之三MySql
- Java 8新特性(三):Optional類Java
- Oracle 12c 新特性(三)Oracle
- kubeadm部署K8S叢集K8S
- Kubeadm叢集部署k8sK8S
- MySQL5.7新版本的運維,效能和新特性介紹MySql運維
- 【DATAGUARD】Oracle19c dataguard新特性及部署Oracle
- 拆除kubeadm部署的Kubernetes 叢集
- Python培訓分享:Python新版本中的6個新特性Python
- kubeadm部署Kubernetes1.13.3高可用版本
- 前端進階系列(三):HTML5新特性前端HTML
- 天天學習ORACLE(三)-11G新特性Oracle
- JDK6.0的新特性之三:理解StAXJDK
- Oracle11新特性——撤銷事務(三)Oracle
- 通過kubeadm工具部署k8s叢集K8S
- 使用kubeadm部署Kubernetes 1.26及其它版本
- 升級 kubeadm 部署的 k8s 叢集K8S
- 新特性
- 附025.kubeadm部署Kubernetes更新證書
- 利用 Kubeadm部署 Kubernetes 1.13.1 叢集實踐錄
- Java EE 7 三大新特性的介紹Java
- Oracle11gr2資料泵新特性(三)Oracle
- Oracle11新特性——分割槽功能增強(三)Oracle
- Oracle11新特性——PLSQL新特性(七)OracleSQL
- Oracle11新特性——PLSQL新特性(六)OracleSQL
- Oracle11新特性——PLSQL新特性(五)OracleSQL
- Oracle11新特性——PLSQL新特性(四)OracleSQL
- Oracle11新特性——PLSQL新特性(二)OracleSQL
- Oracle11新特性——PLSQL新特性(一)OracleSQL
- MySQL Cluster7.2.4初步安裝部署新特性效能測試等MySql
- 【ORACLE新特性】11G 分割槽新特性Oracle
- 使用 Kubeadm+Containerd 部署一個 Kubernetes 叢集AI
- kubeadm 部署k8s 映象翻牆解決辦法K8S