Docker中部署Kubernetes


Kubernetes為Google開源的容器管理框架,提供了Docker容器的誇主機、集群管理、容器部署、高可用、彈性伸縮等一系列功能;Kubernetes的設計目標包括使容器集群任意時刻都處於用戶期望的狀態,因而建立了一整套集群管理機制:容器自動重啟、自動備份、容器自動伸縮等;Kubernetes設計了pod、replication controller、service用於管理容器的了組件,並提供了RESTful格式接口用於操作他們;由於本篇文章主要是Kubernetes所以就不對理論相關進行過多介紹了;
  本篇文章把Kubernetes部署到Docker中,使用三個節點192.168.2.143同時為Master和minion節點,另外還有192.168.2.144、192.168.2.145兩個minion節點;

1、master節點啟動etcd容器
啟動etcd容器

 --綁定4001端口
 docker run -d --net=host --restart=always --name=etcd -v /var/etcd/data:/var/etcd/data  kubernetes/etcd:2.0.5  /usr/local/bin/etcd --addr=192.168.2.143:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data

  在etcd里插入flannel配置信息,指定flannel使用10.0.0.0/8區間

 docker exec -it etcd etcdctl set /solinx.co/network/config '{"Network":"10.0.0.0/8"}'  

2、在master、minion1、minion2節點配置flanneld

 啟動flanneld, wget -c https://github.com/coreos/flannel/releases/download/v0.5.5/flannel-0.5.5-linux-amd64.tar.gz

 ./flanneld --etcd-endpoints=http://192.168.2.143:4001 --etcd-prefix=/solinx.co/network --iface=ens33 > flannel.log  2>&1 &

  flannel啟動后獲得可用於分配的IP集合,存放於/run/flannel/subnet.env中,需要配置docker可用與分配的IP

  Ubuntu下修改Docker配置文件

  在/etc/systemd/system/docker.service  增加EnvironmentFile=-/etc/default/docker
 修改ExecStart=/usr/bin/docker -d -H fd://  ,改成:  ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS

 source /run/flannel/subnet.env
 sh -c "echo DOCKER_OPTS=\\\"--bip=$FLANNEL_SUBNET --mtu=$FLANNEL_MTU\\\" >> /etc/default/docker"

 service docker restart

3、Kubernetes部署
下載kubernetes.tar.gz到master、minion節點中

 wget -c https://github.com/kubernetes/kubernetes/releases/download/v1.2.5/kubernetes.tar.gz

  tar -zxvf 解壓kubernetes.tar.gz文件后在kubernetes/server目錄中找到kubernetes-server-linux-amd64.tar.gz將其解壓,然后在kubernetes/server/bin目錄下找到:kube-apiserver.tar、kube-controller-manager.tar、kube-scheduler.tar;
  在master節點中導入kubernetes Docker鏡像文件

 docker load -i kube-apiserver.tar
 docker load -i kube-controller-manager.tar
 docker load -i kube-scheduler.tar

這里flannel與kubernetes使用同一個etcd

master節點啟動apiServer

 docker run -d --name=apiserver --net=host gcr.io/google_containers/kube-apiserver:7bf05b2d35172296e4fbd2604362456f kube-apiserver --insecure-bind-address=192.168.2.143 --service-cluster-ip-range=10.0.0.0/16 --etcd-servers=http://192.168.2.143:4001  

master節點啟動ControllerManager

 docker run -d --name=ControllerM gcr.io/google_containers/kube-controller-manager:6c95ef0b57ac9deda34ae1a4a40baa0a kube-controller-manager --master=192.168.2.143:8080

master節點啟動Scheduler

 docker run -d --name=scheduler gcr.io/google_containers/kube-scheduler:e5342c3d8ced06850af97347daf6ae4b kube-scheduler --master=192.168.2.143:8080

服務端啟動完成

 ./kubectl -s 192.168.2.143:8080 version 查看kubernetes版本信息

 Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.5", GitCommit:"25eb53b54e08877d3789455964b3e97bdd3f3bce", GitTreeState:"clean"}
 Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.5", GitCommit:"25eb53b54e08877d3789455964b3e97bdd3f3bce", GitTreeState:"clean"}

在Master節點查看服務Container啟動情況:

 docker ps  

在143、144、145 minion節點啟動kubelet

取得minion節點IP

 NODE_IP=`ifconfig ens33 | grep 'inet addr:' | cut -d: -f2 | cut -d' ' -f1`

 ./kubelet --api-servers=192.168.2.143:8080 --node-ip=$NODE_IP --hostname_override=192.168.2.144 > kubelet.log 2>&1 &

注意如果當前兩個幾點的主機名相同則一定要使用hostname_override參數,否則需要把主機名改為不同的;

在master上查看節點信息

 ./kubectl -s 192.168.2.143:8080 get no

節點狀態

在143、144、145節點啟動kube-proxy

 ./kube-proxy --master=192.168.2.143:8080 > proxy.log 2>&1 &

下面的命令來查看pod、replication controller、service和endpoint:

 ./kubectl -s 192.168.1.143:8080 get po
 ./kubectl -s 192.168.1.143:8080 get rc
 ./kubectl -s 192.168.1.143:8080 get svc
 ./kubectl -s 192.168.1.143:8080 get ep  

參考資料:
http://kubernetes.io/docs/user-guide/
文章首發地址:Solinx
http://www.solinx.co/archives/620


免責聲明!

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



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