Kubernetes(K8S)集群管理Docker容器(部署篇)
今天这篇文章教给大家如何快速部署一套Kubernetes集群。K8S集群部署有几种方式:kubeadm、minikube和二进制包。前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包部署,因为自动部署屏蔽了很多细节,使得对各个模块感知很少,非常不利用学习。 所以,这篇文章也是使用二进制包部署Kubernetes集群。
本章目录 一、架构拓扑图二、环境规划角色 | | | | | etcd kube-apiserver kube-controller-manager kube-scheduler | | | | | | |
环境说明: 操作系统: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][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
|