共计 3775 个字符,预计需要花费 10 分钟才能阅读完成。
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 配置文件
在/lib/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/
Kubernetes 集群部署 http://www.linuxidc.com/Linux/2015-12/125770.htm
OpenStack, Kubernetes, Mesos 谁主沉浮 http://www.linuxidc.com/Linux/2015-09/122696.htm
Kubernetes 集群搭建过程中遇到的问题及解决 http://www.linuxidc.com/Linux/2015-12/125735.htm
Kubernetes 的详细介绍:请点这里
Kubernetes 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133020.htm