在滴滴雲上學習 Kubernetes v1.13.0:叢集搭建
前言
Kubernetes 1.13 在 2018 年 12 初 GA,這是今年的第四次也是最後一次大版本。此版本繼續關注 Kubernetes 的穩定性和可擴充套件性,其中在儲存和群集生命週期領域的三個主要功能實現普遍可用(GA);Kubeadm 簡化叢集管理、容器儲存介面(CSI)和 CoreDNS 作為預設 DNS。
我們用最新的版本來學習,透過使用 Kubeadm 來安裝 Kubernetes1.13.0。Kubernetes 的網路要求各節點間可以相互通訊, 而 滴滴雲 的 VPC 環境是天然的支援。
1. 目標
第一次安裝,我們設一個簡單的目標:
-
完成 Kubernetes 1.13 最簡單的安裝
-
可以在叢集中部署簡單的服務
2. 準備環境
在 滴滴雲 上建立三臺 DC2(虛擬機器)
其實不用每個 DC2 都申請 EIP,這裡為了安裝簡單,都配置上。(如果部署單機版,則建立一臺,其安裝區別是單機版安裝後,把 master 設定為可以部署應用,下面安裝的時候會有提示)
節點屬性 | 外網 IP | 內網 IP | 作業系統 | 配置 |
---|---|---|---|---|
master | 116.85.57.121 | 10.254.11.44 | CentOS 7.4 | 4核/8G記憶體/40G |
node-1 | 116.85.10.12 | 10.254.203.71 | CentOS 7.4 | 4核/8G記憶體/40G |
node-2 | 116.85.45.220 | 10.254.56.33 | CentOS 7.4 | 2核/4G記憶體/40G |
後面的安裝均以 root 使用者進行操作,切換到 root,在命令列中 root 使用者的提示符為 #,普通使用者的為 $
[ dc2 - user @ 10 - 254 - 165 - 64 ~ ] $ sudo - i
[ root @ 10 - 254 - 165 - 64 ~ ] #
預設情況下 滴滴雲 的 DC2 的防火牆是關著的,這裡不用再關閉。如果你的環境開著,先關閉。關閉的方式如下:
3. 安裝
新增 Kubernetes yum 源
執行 yum 安裝
[ root @ 10 - 254 - 165 - 64 ~ ] # yum install -y docker kubelet kubeadm kubectl kubernetes-cni
安裝完成後,可以看見下面安裝成功的提示:
安裝好後檢查一下 Docker和 Kubeadm 版本
啟動 Docker 和 Kubelet 服務
執行
kubeadm config images list
檢視安裝 Kubernetes 需要哪些依賴
這個操作會卡一會兒,提示
dl.k8s.io
不可達,但是會輸出需要的映象源及對應的版本,這一步可以直接跳過。
下載依賴包,國內的網路環境下載依賴包比較困難,筆者已經把對應的包同步到 Docker Hub 上面了
上面的內容在每個節點上面都執行,下面的在 master 上面執行。
初始化叢集
這兒帶上引數
--kubernetes-version=v1.13.0
是為了防止以後看教程的時候版本更新了,會安裝更新的版本,導致安裝失敗。使用
--pod-network-cidr=172.16.0.0/12
是為了支援 CNI 網路外掛。
[ root @ 10 - 254 - 11 - 44 ~ ] # kubeadm init --pod-network-cidr=172.16.0.0/12 --kubernetes-version=v1.13.0
看見下面的輸出,表示初始化成功了, 輸出的結果中的
kubeadm join ...
的內容為以後在 Node 節點上面新增到叢集中需要執行的命令。
初始化成功後執行正面的命令複製配置檔案到 root 使用者和普通使用者的 home 目錄下,以便連上叢集使用,執行上面提示中的三行語句
新增 Weave 網路外掛
[ root @ 10 - 254 - 165 - 64 ~ ] # kubectl apply -f "(kubectl version | base64 | tr -d '\n')"
新增成功後提示:
如果是單機版本,則執行下面的命令讓 master 可以部署應用
[ root @ 10 - 254 - 165 - 64 ~ ] # kubectl taint nodes --all node-role.kubernetes.io/master-
如果新增其它節點,則在其它兩個 Node 節點上做完 Docker 和 Kubeadm 的安裝後 執行新增 Node 命令,新增節點到叢集中,下面的內容從上面的 kubeadm init 的結果中查詢,然後複製執行(切記不要複製教程中的)
[ root @ 10 - 254 - 165 - 64 ~ ] # kubeadm join 10.254.11.44:6443 --token iqq37y.cx5jpycw939zpkfn --discovery-token-ca-cert-hash
sha256:15b997b2e6e127b453a96a96476cb0d68c89c82c42c0aa80cd1169e5bbd6af2e
檢視叢集中 Node 情況
到這一步,叢集的安裝已經完成,下面寫兩個指令碼驗證是否可用。
4. 驗證 K8s 叢集
下面的操作可以使用普通使用者來操作 K8s 叢集了,一般操作使用普通使用者來操作是一個良好的習慣。
透過 ReplicaSet 配置 Tomcat Web 叢集
使用 Kubectl 命令建立 ReplicaSet
[ dc2 - user @ 10 - 254 - 11 - 44 helloworld ] $ kubectl create - f web - rc . yaml
replicationcontroller / web created
檢視我們剛部署的兩個 Tomcat 的 pod, 剛開始時 pod 的狀態可能為 ContainerCreating,使用命令檢視,可以看見是在拉取對應的映象
使用命令檢視,可以看見是在拉取 Tomcat的映象:
過一會兒,拉取完後,可以看見兩個 pod 處於執行狀態:
檢視 pod 的 IP,並使用 pod IP 對 Tomcat 進行訪問
目前只能在伺服器上透過 podIP 對服務進行訪問,但是我們的 Web 服務肯定是需要向外提供服務的。下面透過建立 Service,對外暴露服務:
建立一個 Tomcat 的 Service 對外暴露服務
Service 的配置中 nodePort: 30303 把服務埠對映到物理機, 同時設定 Service 的 type 為 NodePort, spec.selector 中 app: web 與我們之前建立的
web-rc.yaml
中的 label 一樣。
建立 Service
[ dc2 - user @ 10 - 254 - 11 - 44 helloworld ] $ kubectl create - f web - svc - out . yaml
service / web created
檢視 Service
訪問服務
在叢集中可以使用 叢集 IP+ 埠 對服務進行訪問:
在叢集外可以透過 DC2 的內/外網 IP 對叢集進行訪問:
OK, 小目標完成。
5. 總結
-
在安裝填坑的過程中,網路是最大的問題,解決好網路的問題後,其它相對來說都是小問題
-
在使用 Docker Tag 做
k8s.gcr.io
的包的過程中,不小心把 ETCD 的 image 搞錯了,導致安裝過程總是不成功,使用docker save load
方式匯出本機的 image 又可用。所以在安裝過程中需要非常仔細 -
多看官網文件
最後,把安裝 master 的相關命令,寫成了指令碼,可以把 指令碼 複製到虛機上面默默地看著自動安裝:
[ root @ 10 - 254 - 165 - 64 ~ ] # sh -x init-k8s.sh
參考文件:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2284937/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在滴滴雲上搭建 MongoDB 叢集 (一):MongoDB
- 在滴滴雲上搭建 Redis-Cluster 叢集Redis
- 在滴滴雲 DC2 雲伺服器上搭建 RabbitMQ 叢集伺服器MQ
- Kubernetes 叢集搭建(上)
- 如何在滴滴雲 DC2 上搭建 ETCD 叢集
- 在滴滴雲 DC2 雲伺服器上搭建 ZooKeeper 叢集實戰(一)伺服器
- 【Kubernetes學習筆記】-kubeadm 手動搭建kubernetes 叢集筆記
- 如何在滴滴雲 DC2 上搭建高可用 MySQL 叢集MySql
- 基於滴滴雲伺服器搭建 Consul 叢集伺服器
- [雲原生]Kubernetes - 叢集搭建(第2章)
- 在滴滴雲快速搭建自己的簡易服務叢集[入門版]
- Kubernetes 叢集搭建(下)
- Kubernetes叢集搭建(vagrant)
- 使用Gardener在GoogleCloudPlatform上建立Kubernetes叢集GoCloudUDPPlatform
- 搭建 Kubernetes 高可用叢集
- 滴滴雲上搭建 Gluster
- 在滴滴雲 DC2 雲伺服器上搭建 ELK 日誌採集系統伺服器
- Kubernetes — 在 OpenStack 上使用 kubeadm 部署高可用叢集
- 使用Gardener在Google Cloud Platform上建立Kubernetes叢集GoCloudPlatform
- 在滴滴雲上搭建 API-Gateway Kong 實踐APIGateway
- 在K8S上搭建Redis叢集K8SRedis
- 使用Kubeadm搭建高可用Kubernetes叢集
- 在 Minecraft 中管理 Kubernetes 叢集Raft
- 在 Azure 上部署 Kubernetes 叢集
- 在kubernetes上部署consul叢集
- ZooKeeper學習筆記一:叢集搭建筆記
- Docker 與 K8S學習筆記(二十三)—— Kubernetes叢集搭建DockerK8S筆記
- 使用容器快速在阿里雲 ECS 多節點上搭建 Citus 12.1 叢集阿里
- 搭建高可用kubernetes叢集(keepalived+haproxy)
- 使用 Kind 搭建你的本地 Kubernetes 叢集
- Ubuntu上kubeadm安裝Kubernetes叢集Ubuntu
- 如何在CentOS上建立Kubernetes叢集CentOS
- 在滴滴雲 DC2 雲伺服器上搭建 Codis 實戰伺服器
- 在滴滴雲 DC2 雲伺服器上搭建 MongoDB 實戰伺服器MongoDB
- 在 Azure 中部署 Kubernetes 容器叢集
- Nginx學習筆記(反向代理&搭建叢集)Nginx筆記
- Redis學習筆記(十七) 叢集(上)Redis筆記
- 一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集分散式