六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 1025|回复: 0

Kubernetes(K8S)集群管理Docker容器(部署篇)

[复制链接]
 楼主| 发表于 2017-12-6 22:08:13 | 显示全部楼层 |阅读模式
Kubernetes(K8S)集群管理Docker容器(部署篇)
今天这篇文章教给大家如何快速部署一套Kubernetes集群。K8S集群部署有几种方式:kubeadm、minikube和二进制包。前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包部署,因为自动部署屏蔽了很多细节,使得对各个模块感知很少,非常不利用学习。
所以,这篇文章也是使用二进制包部署Kubernetes集群。

本章目录
一、架构拓扑图
二、环境规划
角色
IP
组件
master
192.168.0.211
etcd
kube-apiserver
kube-controller-manager
kube-scheduler
node01
192.168.0.212
kubelet
kube-proxy
docker
node02
192.168.0.213
kubelet
kube-proxy
docker
环境说明:
操作系统:Ubuntu16.04 or CentOS7
Kubernetes版本:v1.8.3
Docker版本:v17.09-ce
均采用当前最新稳定版本。
关闭selinux。
三、部署集群3.1 下载二进制包
打开下面网址,下载下面两个红色框框的包。
下载完成后,上传到服务器:
kubernetes-server-linux-amd64.tar.gz上传到master节点。
kubernetes-node-linux-amd64.tar.gz 上传到node节点。
3.2  安装etcd3[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em][size=1em]k8s-master# yum install etcd –y
[size=1em]k8s-master# vi /etc/etcd/etcd.conf
[size=1em]ETCD_NAME="default"
[size=1em]ETCD_DATA_DIR="/var/lib/etcd/default"
[size=1em]ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
[size=1em]ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
[size=1em]k8s-master# systemctl enable etcd
[size=1em]k8s-master# systemctl start etcd




注意:Ubuntu系统etcd配置文件在/etc/default/etcd。
3.3 运行Master节点组件[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]k8s-master# tar zxvf kubernetes-server-linux-amd64.tar.gz
[size=1em]k8s-master# mkdir -p /opt/kubernetes/{bin,cfg}
[size=1em]k8s-master# mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin



3.3.1 apiserver
创建配置文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em][size=1em]# vi /opt/kubernetes/cfg/kube-apiserver
[size=1em]# 启用日志标准错误
[size=1em]KUBE_LOGTOSTDERR="--logtostderr=true"
[size=1em]# 日志级别
[size=1em]KUBE_LOG_LEVEL="--v=4"
[size=1em]# Etcd服务地址
[size=1em]KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.211:2379"
[size=1em]# API服务监听地址
[size=1em]KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
[size=1em]# API服务监听端口
[size=1em]KUBE_API_PORT="--insecure-port=8080"
[size=1em]# 对集群中成员提供API服务地址
[size=1em]KUBE_ADVERTISE_ADDR="--advertise-address=192.168.0.211"
[size=1em]# 允许容器请求特权模式,默认false
[size=1em]KUBE_ALLOW_PRIV="--allow-privileged=false"
[size=1em]# 集群分配的IP范围
[size=1em]KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.10.10.0/24"



创建systemd服务文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em]18

[size=1em]19

[size=1em][size=1em]# vi /lib/systemd/system/kube-apiserver.service
[size=1em][Unit]
[size=1em]Description=Kubernetes API Server
[size=1em]Documentation=https://github.com/kubernetes/kubernetes
[size=1em][Service]
[size=1em]EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
[size=1em]#ExecStart=/opt/kubernetes/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
[size=1em]ExecStart=/opt/kubernetes/bin/kube-apiserver \
[size=1em]${KUBE_LOGTOSTDERR} \
[size=1em]${KUBE_LOG_LEVEL} \
[size=1em]${KUBE_ETCD_SERVERS} \
[size=1em]${KUBE_API_ADDRESS} \
[size=1em]${KUBE_API_PORT} \
[size=1em]${KUBE_ADVERTISE_ADDR} \
[size=1em]${KUBE_ALLOW_PRIV} \
[size=1em]${KUBE_SERVICE_ADDRESSES}
[size=1em]Restart=on-failure
[size=1em][Install]
[size=1em]WantedBy=multi-user.target



启动服务,并设置开机启动:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]# systemctl daemon-reload
[size=1em]# systemctl enable kube-apiserver
[size=1em]# systemctl restart kube-apiserver



注意:apiserver默认支持etcd3,如果是etcd2,需启动时指定版本选项--storage-backend=etcd2
3.3.2 scheduler
创建配置文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em][size=1em]# vi /opt/kubernetes/cfg/kube-scheduler
[size=1em]KUBE_LOGTOSTDERR="--logtostderr=true"
[size=1em]KUBE_LOG_LEVEL="--v=4"
[size=1em]KUBE_MASTER="--master=192.168.0.211:8080"
[size=1em]KUBE_LEADER_ELECT="--leader-elect"



创建systemd服务文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em][size=1em]# vi /lib/systemd/system/kube-scheduler.service
[size=1em][Unit]
[size=1em]Description=Kubernetes Scheduler
[size=1em]Documentation=https://github.com/kubernetes/kubernetes
[size=1em][Service]
[size=1em]EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler
[size=1em]ExecStart=/opt/kubernetes/bin/kube-scheduler \
[size=1em]${KUBE_LOGTOSTDERR} \
[size=1em]${KUBE_LOG_LEVEL} \
[size=1em]${KUBE_MASTER} \
[size=1em]${KUBE_LEADER_ELECT}
[size=1em]Restart=on-failure
[size=1em][Install]
[size=1em]WantedBy=multi-user.target



启动服务,并设置开机启动:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]# systemctl daemon-reload
[size=1em]# systemctl enable kube-scheduler
[size=1em]# systemctl restart kube-scheduler



3.3.3 controller-manager
创建配置文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em][size=1em]# vi /opt/kubernetes/cfg/kube-controller-manager
[size=1em]KUBE_LOGTOSTDERR="--logtostderr=true"
[size=1em]KUBE_LOG_LEVEL="--v=4"
[size=1em]KUBE_MASTER="--master=192.168.0.211:8080"



创建systemd服务文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em][size=1em]# vi /lib/systemd/system/kube-controller-manager.service
[size=1em][Unit]
[size=1em]Description=Kubernetes Controller Manager
[size=1em]Documentation=https://github.com/kubernetes/kubernetes
[size=1em][Service]
[size=1em]EnvironmentFile=-/opt/kubernetes/cfg/kube-controller-manager
[size=1em]ExecStart=/opt/kubernetes/bin/kube-controller-manager \
[size=1em]${KUBE_LOGTOSTDERR} \
[size=1em]${KUBE_LOG_LEVEL} \
[size=1em]${KUBE_MASTER} \
[size=1em]${KUBE_LEADER_ELECT}
[size=1em]Restart=on-failure
[size=1em][Install]
[size=1em]WantedBy=multi-user.target



启动服务,并设置开机启动:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]# systemctl daemon-reload
[size=1em]# systemctl enable kube-controller-manager
[size=1em]# systemctl restart kube-controller-manager



3.3.4 小结
Master节点组件就全部启动了,需要注意的是服务启动顺序有依赖,先启动etcd,再启动apiserver,IT论坛组件无顺序要求。
查看Master节点组件进程状态:
说明组件都在运行。
如果启动失败,请查看启动日志,例如:
#journalctl -u kube-apiserver
3.4  运行Node节点组件[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]k8s-node01# tar zxvf kubernetes-node-linux-amd64.tar.gz
[size=1em]k8s-node01# mkdir -p /opt/kubernetes/{bin,cfg}
[size=1em]k8s-node01# mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/



3.4.1 kubelet
创建kubeconfig配置文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em][size=1em]# vi /opt/kubernetes/cfg/kubelet.kubeconfig
[size=1em]apiVersion: v1
[size=1em]kind: Config
[size=1em]clusters:
[size=1em]  - cluster:
[size=1em]      server: http://192.168.0.211:8080
[size=1em]    name: local
[size=1em]contexts:
[size=1em]  - context:
[size=1em]      cluster: local
[size=1em]    name: local
[size=1em]current-context: local



kubeconfig文件用于kubelet连接master apiserver。
创建配置文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em]18

[size=1em]19

[size=1em]20

[size=1em][size=1em]# vi /opt/kubernetes/cfg/kubelet            
[size=1em]# 启用日志标准错误
[size=1em]KUBE_LOGTOSTDERR="--logtostderr=true"
[size=1em]# 日志级别
[size=1em]KUBE_LOG_LEVEL="--v=4"
[size=1em]# Kubelet服务IP地址
[size=1em]NODE_ADDRESS="--address=192.168.0.212"
[size=1em]# Kubelet服务端口
[size=1em]NODE_PORT="--port=10250"
[size=1em]# 自定义节点名称
[size=1em]NODE_HOSTNAME="--hostname-override=192.168.0.212"
[size=1em]# kubeconfig路径,指定连接API服务器
[size=1em]KUBELET_KUBECONFIG="--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig"
[size=1em]# 允许容器请求特权模式,默认false
[size=1em]KUBE_ALLOW_PRIV="--allow-privileged=false"
[size=1em]# DNS信息
[size=1em]KUBELET_DNS_IP="--cluster-dns=10.10.10.2"
[size=1em]KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
[size=1em]# 禁用使用Swap
[size=1em]KUBELET_SWAP="--fail-swap-on=false"



创建systemd服务文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em]18

[size=1em]19

[size=1em]20

[size=1em]21

[size=1em]22

[size=1em][size=1em]# vi /lib/systemd/system/kubelet.service
[size=1em][Unit]
[size=1em]Description=Kubernetes Kubelet
[size=1em]After=docker.service
[size=1em]Requires=docker.service
[size=1em][Service]
[size=1em]EnvironmentFile=-/opt/kubernetes/cfg/kubelet
[size=1em]ExecStart=/opt/kubernetes/bin/kubelet \
[size=1em]${KUBE_LOGTOSTDERR} \
[size=1em]${KUBE_LOG_LEVEL} \
[size=1em]${NODE_ADDRESS} \
[size=1em]${NODE_PORT} \
[size=1em]${NODE_HOSTNAME} \
[size=1em]${KUBELET_KUBECONFIG} \
[size=1em]${KUBE_ALLOW_PRIV} \
[size=1em]${KUBELET_DNS_IP} \
[size=1em]${KUBELET_DNS_DOMAIN} \
[size=1em]${KUBELET_SWAP}
[size=1em]Restart=on-failure
[size=1em]KillMode=process
[size=1em][Install]
[size=1em]WantedBy=multi-user.target



启动服务,并设置开机启动:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]# systemctl daemon-reload
[size=1em]# systemctl enable kubelet
[size=1em]# systemctl restart kubelet



3.4.2 proxy
创建配置文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em][size=1em]# vi /opt/kubernetes/cfg/kube-proxy            
[size=1em]# 启用日志标准错误
[size=1em]KUBE_LOGTOSTDERR="--logtostderr=true"
[size=1em]# 日志级别
[size=1em]KUBE_LOG_LEVEL="--v=4"
[size=1em]# 自定义节点名称
[size=1em]NODE_HOSTNAME="--hostname-override=192.168.0.212"
[size=1em]# API服务地址
[size=1em]KUBE_MASTER="--master=http://192.168.0.211:8080"



创建systemd服务文件:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em][size=1em]# vi /lib/systemd/system/kube-proxy.service
[size=1em][Unit]
[size=1em]Description=Kubernetes Proxy
[size=1em]After=network.target
[size=1em][Service]
[size=1em]EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy
[size=1em]ExecStart=/opt/kubernetes/bin/kube-proxy \
[size=1em]${KUBE_LOGTOSTDERR} \
[size=1em]${KUBE_LOG_LEVEL} \
[size=1em]${NODE_HOSTNAME} \
[size=1em]${KUBE_MASTER}
[size=1em]Restart=on-failure
[size=1em][Install]
[size=1em]WantedBy=multi-user.target



启动服务,并设置开机启动:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]# systemctl daemon-reload
[size=1em]# systemctl enable kube-proxy
[size=1em]# systemctl restart kube-proxy



3.4.3 小结
IT论坛节点加入集群与node01方式相同,但需修改kubelet的--address和--hostname-override选项为本机IP。
查看Node节点组件进程状态:
说明组件都在运行。
如果启动失败,请查看启动日志,例如:
#journalctl -u kubelet
3.5 验证集群是否部署成功
设置可执行文件到系统变量,方便使用:
[size=1em]
[size=1em]1

[size=1em]2

[size=1em][size=1em]# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
[size=1em]# source /etc/profile



查看集群节点状态:

两个节点都加入到了kubernetes集群,就此部署完成。

另外,近期录制了<<Docker高级应用实战课程>>,包括Swarm和Kubernetes集群管理系统,集群也是Docker技术应用精髓所在!有需要的不妨看看。

QQ技术群,有需要的朋友可以加下:
Python运维开发群(249171211)
Docker技术交流群(516039855)

博主会继续更新Kubernetes相关文章,有需要的朋友可以关注下。
Kubernetes(K8S)集群管理Docker容器(部署篇)
http://blog.51cto.com/lizhenliang/1983392
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表