1. 程式人生 > >基於Centos7構建Kubernetes平臺

基於Centos7構建Kubernetes平臺

楊文 docker kubernetes

防偽碼:我已經過了餐桌上有只雞就一定能吃到雞腿的年紀了。


Kubernetes作為Docker生態圈中重要一員,是Google多年大規模容器管理技術的開源版本,是產線實踐經驗的最佳表現[G1]。如Urs Hlzle所說,無論是公有雲還是私有雲甚至混合雲,Kubernetes將作為一個為任何應用,任何環境的容器管理框架無處不在。正因為如此, 目前受到各大巨頭及初創公司的青睞,如Microsoft、VMWare、Red Hat、CoreOS、Mesos等,紛紛加入給Kubernetes貢獻代碼。隨著Kubernetes社區及各大廠商的不斷改進、發展,Kuberentes將成為容器管理領域的領導者。

2. 什麽是Kubernetes

Kubernetes是Google開源的容器集群管理系統,其提供應用部署、維護、 擴展機制等功能,利用Kubernetes能方便地管理跨機器運行容器化的應用,其主要功能如下:

1) 使用Docker對應用程序包裝(package)、實例化(instantiate)、運行(run)。

2) 以集群的方式運行、管理跨機器的容器。

3) 解決Docker跨機器容器之間的通訊問題。

4) Kubernetes的自我修復機制使得容器集群總是運行在用戶期望的狀態。

當前Kubernetes支持GCE、vShpere


實驗過程:

一.環境搭建:

3centos7的主機:

master 192.168.1.140 部署

etcd,kube-apiserver,kube-controller-manager,kube-scheduler 4個應用。

node01 192.168.1.31 部署dockerkubelet kube-proxy 3個應用

node02 192.168.1.11 部署dockerkubelet kube-proxy 3個應用

  1. 修改主機名和ip,三個主機網卡均設置為橋接模式,能夠聯網。

  2. 分別修改/etc/hosts文件:

技術分享

  1. 三臺均設置防火墻的默認區域為trusted

技術分享

  1. 三臺均關閉selinux.

技術分享

  1. 安裝docker,並啟動。因為master之後還需要做registry倉庫,所以也需要安裝docker.

技術分享

  1. 開啟路由轉發功能:

技術分享

二.實現node01node02之間容器互通。

  1. node01node02新建網橋,並固定網橋ip

node01上操作:

刪除網橋docker0,新建網橋kbr0:

技術分享

新建網橋的配置文件:

技術分享

新建路由文件:route-eth0eth0node1上的網卡名。

技術分享

修改docker配置文件,添加-b=kbr0參數

技術分享

reboot重啟系統使網橋設置生效。

  1. node02做同樣的設置:

新建網橋:

技術分享

新建網橋配置文件:

技術分享

創建路由文件:

技術分享

修改docker 配置文件:

技術分享

重啟系統reboot.

  1. 系統啟動之後,查看網卡信息和路由信息。


技術分享

技術分享

  1. 驗證兩個宿主機間容器的互通性:

node01上運行一個容器:

技術分享

node02上運行一個容器:

技術分享

容器間互ping:


技術分享

技術分享

三.master上部署應用:

  1. 安裝etcd.

技術分享

查看etcd配置文件:

技術分享

  1. 修改配置文件:

技術分享

  1. 啟動etcd服務:

技術分享

查看服務端口號:

技術分享

  1. 部署k8s-master組件(apiserver+controller-manager+scheduler

安裝軟件:


技術分享

技術分享

查看配置文件:

技術分享

  1. 修改配置文件:


技術分享

技術分享

KUBE_LOGTOSTDERR //日誌設置

KUBE_LOG_KEVEL //日誌級別設置

KUBE_ALLOW_PRIV //是否允許運行特權容器

KUBE_MASTER //主節點的地址,主要為replication controllerschedulerkubelet可以順利找到apiserver

技術分享

技術分享


KUBE_API_ADDRESS //監聽的接口,如果配置為127.0.0.1則只監聽localhost,配置為0.0.0.0會監聽所有接口,這裏配置為0.0.0.0

KUBE_API_PORT="--port=8080" //apiserver的監聽端口,默認8080,不用修改。

KUBELET_PORT="--kubelet_port=10250" // kubelet監聽的端口,默認10250,無需修改

KUBE_ETCD_SERVERS //指定etcd節點的地址

KUBE_SERVICE_ADDRESSES //這個是設置今後運行Service所在的ip網段

KUBE_API_ARGS=”--secure-port=0” //默認是要求https安全通信,”--secure-port=0”則不要求https安全通信

註:這裏需要註意原來KUBE_ADMISSION_CONTROL默認包含的要刪掉,不然啟動APIserver的時候會報錯

  1. 啟動服務:

技術分享

查看服務端口:


技術分享

四.部署node主機:

  1. 安裝kubernetes-node軟件:

技術分享

查看配置文件:

技術分享

  1. 修改配置文件:

技術分享

技術分享

技術分享

技術分享

配置項KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"作用k8s創建pod的時候需要起一個基本容器,所以node節點要能連網。也可以自己搭建一個私有倉庫,將pod-infrastructure:latest鏡像上傳到私有倉庫中,修改此配置文件的地址就可以。

  1. 啟動服務:

技術分享

查看端口:

技術分享

  1. node02主機上重復上面的操作。

  2. master上檢查node 狀態:

技術分享

技術分享

五.搭建私有倉庫:

Kubernetes管理容器如果是第一次操作,可能會有一定的等待時間,這是因為第一次下載images需要一段時間。如果本地沒有docker registry,要確保節點能訪問互聯網,所以我們可以搭建一個私有倉庫,由私有倉庫提供所需要的鏡像,

本實驗環境中用kubernetes同時作為registry

  1. 導入鏡像:

技術分享

  1. 基於私有倉庫鏡像運行容器

技術分享

本地訪問私有倉庫:

技術分享

  1. 上傳鏡像到私有倉庫。

導入之後用到的鏡像到本地:

技術分享

給基礎鏡像打個標簽:

技術分享

在三臺主機上均修改docker 的配置文件,指定私有倉庫的url.

技術分享

重啟docker服務:

技術分享

上傳鏡像到私有倉庫並查看:

技術分享

測試,下載剛才上傳的鏡像:


技術分享

技術分享

六.部署web應用

  1. 為了部署pod的時候,下載鏡像速度快點,把node節點主機配置文件中的pod鏡像下載地址修改為本地私有倉庫地址:


技術分享

技術分享

然後systemctl restart kubelet.service

  1. 創建apache-rc.yaml文件,根據文件內容創建rcpod


技術分享

技術分享

查看pods狀態:

技術分享

查看pods詳細狀態:

技術分享

附:刪除pod

kubectl delete pod podName

由於設置了兩份副本,所以刪除pod的時候,k8s會迅速起另外一個一模一樣的pod以保持副本數量為2不變。

要徹底刪除pod,只能刪除創建它的replication controller

查看replication controller

kubectl get rc

刪除replication controller

kubectl delete rc rcName

刪除rc之後,其創建的pod會一並刪除

3. 部署節點內部可訪問的apacheservice

ServertypeClusterIP NodePort之分,缺省是ClusterIp,這種類型的service只能在集群內部訪問

創建配置文件:


技術分享

技術分享

創建service:


技術分享

查看service狀態:

技術分享

驗證apache服務:(在node節點執行)


技術分享

技術分享

  1. 部署外部可訪問的apache service

創建nodeport類型的service .這種類型的Service在集群外部是可以訪問


技術分享

技術分享

創建service:

技術分享

查看service:

技術分享

驗證service的可訪問性:

外部訪問:


技術分享

技術分享

內部訪問:

技術分享

本文出自 “一盞燭光” 博客,謝絕轉載!

基於Centos7構建Kubernetes平臺