二、基於kubernetes構建Docker集群環境實戰


kubernetes是google公司基於docker所做的一個分布式集群,有以下主件組成
   etcd: 高可用存儲共享配置和服務發現,作為與minion機器上的flannel配套使用,作用是使每台 minion上運行的docker擁有不同的ip段,最終目的是使不同minion上正在運行的docker containner都有一個與別的任意一個containner(別的minion上運行的docker containner)不一樣的IP地址。
   flannel: 網絡結構支持
   kube-apiserver: 不論通過kubectl還是使用remote api 直接控制,都要經過apiserver
  kube-controller-manager: 對replication controller, endpoints controller, namespace controller, and serviceaccounts controller的循環控制,與kube-apiserver交互,保證這些controller工作
   kube-scheduler: Kubernetes scheduler的作用就是根據特定的調度算法將pod調度到指定的工作節點(minion)上,這一過程也叫綁定(bind)
   kubelet: Kubelet運行在Kubernetes Minion Node上. 它是container agent的邏輯繼任者
   kube-proxy: kube-proxy是kubernetes 里運行在minion節點上的一個組件, 它起的作用是一個服務代理的角色
 
圖為GIT+Jenkins+Kubernetes+Docker+Etcd+confd+Nginx+Glusterfs架構
如下:

 

環境:
centos7系統機器三台:
    10.0.0.81: 用來安裝kubernetes master
    10.0.0.82: 用作kubernetes minion (minion1)
    10.0.0.83: 用作kubbernetes minion (minion2)
 
一、關閉系統運行的防火牆及selinux
1。如果系統開啟了防火牆則按如下步驟關閉防火牆(所有機器)
# systemctl stop firewalld # systemctl disable firewalld
2.關閉selinux
#setenforce 0
#sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux 

  

 
二、MASTER安裝配置
1. 安裝並配置Kubernetes master(yum 方式)
# yum -y install etcd kubernetes

    

 配置etcd。確保列出的這些項都配置正確並且沒有被注釋掉,下面的配置都是如此 

#vim /etc/etcd/etcd.conf
 
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"

  配置kubernetes

vim /etc/kubernetes/apiserver
 
KUBE_API_ADDRESS="--address=0.0.0.0" KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet_port=10250"
KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

   

2. 啟動etcd, kube-apiserver, kube-controller-manager and kube-scheduler服務
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done

3.設置etcd網絡

#etcdctl -C 10.0.0.81:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}' 
4. 至此master配置完成,運行kubectl get nodes可以查看有多少minion在運行,以及其狀態。這里我們的minion還都沒有開始安裝配置,所以運行之后結果為空
# kubectl get nodes NAME LABELS STATUS

   

三、MINION安裝配置(每台minion機器都按如下安裝配置)
 
1. 環境安裝和配置
# yum -y install flannel kubernetes

  配置kubernetes連接的服務端IP

#vim /etc/kubernetes/config
KUBE_MASTER="--master=http://10.0.0.81:8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://10.0.0.81:2379"

  配置kubernetes  ,(請使用每台minion自己的IP地址比如10.0.0.81:代替下面的$LOCALIP)

 
#vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_PORT="--port=10250" # change the hostname to this host’s IP address KUBELET_HOSTNAME="--hostname_override=$LOCALIP" KUBELET_API_SERVER="--api_servers=http://10.0.0.81:8080" KUBELET_ARGS=""

  

2. 准備啟動服務(如果本來機器上已經運行過docker的請看過來,沒有運行過的請忽略此步驟)
    運行ifconfig,查看機器的網絡配置情況(有docker0)
# ifconfig docker0
Link encap:Ethernet HWaddr 02:42:B2:75:2E:67 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP 
BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0
errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

  warning:在運行過docker的機器上可以看到有docker0,這里在啟動服務之前需要刪掉docker0配置,在命令行運行:sudo ip link delete docker0

3.配置flannel網絡

#vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://10.0.0.81:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"  
PS:其中atomic.io與上面etcd中的Network對應
 
4. 啟動服務
# for SERVICES in flanneld kube-proxy kubelet docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done

 

四、配置完成驗證安裝
    確定兩台minion(10.0.0.82和10.0.0.83)和一台master(10.0.0.81)都已經成功的安裝配置並且服務都已經啟動了。
    切換到master機器上,運行命令kubectl get nodes 
# kubectl get nodes
NAME STATUS AGE
10.0.0.82 Ready 1m
10.0.0.83 Ready 1m

  可以看到配置的兩台minion已經在master的node列表中了。如果想要更多的node,只需要按照minion的配置,配置更多的機器就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM