设为首页 收藏本站
查看: 1789|回复: 0

[经验分享] Kubernetes(K8S)集群管理Docker容器(部署篇)

[复制链接]

尚未签到

发表于 2018-9-15 14:20:58 | 显示全部楼层 |阅读模式
  今天这篇文章教给大家如何快速部署一套Kubernetes集群。K8S集群部署有几种方式:kubeadm、minikube和二进制包。前两者属于自动部署,简化部署操作,并且minikube只是单机测试,而kubeadm还是beta版,强烈推荐初学者使用二进制包部署,因为自动部署屏蔽了很多细节,使得对各个模块感知很少,非常不利用学习。
  所以,这篇文章也是使用二进制包部署Kubernetes集群。
  本章目录
DSC0000.png

一、架构拓扑图
DSC0001.png

二、环境规划
  角色
  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 下载二进制包
  打开下面网址,下载下面两个红色框框的包。
  https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v183
DSC0002.png

DSC0003.png

  下载完成后,上传到服务器:
  kubernetes-server-linux-amd64.tar.gz上传到master节点。
  kubernetes-node-linux-amd64.tar.gz 上传到node节点。
3.2  安装etcd3
k8s-master# yum install etcd –y  
k8s-master# vi /etc/etcd/etcd.conf
  
ETCD_NAME="default"
  
ETCD_DATA_DIR="/var/lib/etcd/default"
  
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
  
ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
  
k8s-master# systemctl enable etcd
  
k8s-master# systemctl start etcd
  注意:Ubuntu系统etcd配置文件在/etc/default/etcd。
3.3 运行Master节点组件
k8s-master# tar zxvf kubernetes-server-linux-amd64.tar.gz  
k8s-master# mkdir -p /opt/kubernetes/{bin,cfg}
  
k8s-master# mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin
3.3.1 apiserver
  创建配置文件:
# vi /opt/kubernetes/cfg/kube-apiserver  
# 启用日志标准错误
  
KUBE_LOGTOSTDERR="--logtostderr=true"
  
# 日志级别
  
KUBE_LOG_LEVEL="--v=4"
  
# Etcd服务地址
  
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.0.211:2379"
  
# API服务监听地址
  
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
  
# API服务监听端口
  
KUBE_API_PORT="--insecure-port=8080"
  
# 对集群中成员提供API服务地址
  
KUBE_ADVERTISE_ADDR="--advertise-address=192.168.0.211"
  
# 允许容器请求特权模式,默认false
  
KUBE_ALLOW_PRIV="--allow-privileged=false"
  
# 集群分配的IP范围
  
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.10.10.0/24"
  创建systemd服务文件:
# vi /lib/systemd/system/kube-apiserver.service  
[Unit]
  
Description=Kubernetes API Server
  
Documentation=https://github.com/kubernetes/kubernetes
  
[Service]
  
EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
  
#ExecStart=/opt/kubernetes/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
  
ExecStart=/opt/kubernetes/bin/kube-apiserver \
  
${KUBE_LOGTOSTDERR} \
  
${KUBE_LOG_LEVEL} \
  
${KUBE_ETCD_SERVERS} \
  
${KUBE_API_ADDRESS} \
  
${KUBE_API_PORT} \
  
${KUBE_ADVERTISE_ADDR} \
  
${KUBE_ALLOW_PRIV} \
  
${KUBE_SERVICE_ADDRESSES}
  
Restart=on-failure
  
[Install]
  
WantedBy=multi-user.target
  启动服务,并设置开机启动:
# systemctl daemon-reload  
# systemctl enable kube-apiserver
  
# systemctl restart kube-apiserver
  注意:apiserver默认支持etcd3,如果是etcd2,需启动时指定版本选项--storage-backend=etcd2
3.3.2 scheduler
  创建配置文件:
# vi /opt/kubernetes/cfg/kube-scheduler  
KUBE_LOGTOSTDERR="--logtostderr=true"
  
KUBE_LOG_LEVEL="--v=4"
  
KUBE_MASTER="--master=192.168.0.211:8080"
  
KUBE_LEADER_ELECT="--leader-elect"
  创建systemd服务文件:
# vi /lib/systemd/system/kube-scheduler.service  
[Unit]
  
Description=Kubernetes Scheduler
  
Documentation=https://github.com/kubernetes/kubernetes
  
[Service]
  
EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler
  
ExecStart=/opt/kubernetes/bin/kube-scheduler \
  
${KUBE_LOGTOSTDERR} \
  
${KUBE_LOG_LEVEL} \
  
${KUBE_MASTER} \
  
${KUBE_LEADER_ELECT}
  
Restart=on-failure
  
[Install]
  
WantedBy=multi-user.target
  启动服务,并设置开机启动:
# systemctl daemon-reload  
# systemctl enable kube-scheduler
  
# systemctl restart kube-scheduler
3.3.3 controller-manager
  创建配置文件:
# vi /opt/kubernetes/cfg/kube-controller-manager  
KUBE_LOGTOSTDERR="--logtostderr=true"
  
KUBE_LOG_LEVEL="--v=4"
  
KUBE_MASTER="--master=192.168.0.211:8080"
  创建systemd服务文件:
# vi /lib/systemd/system/kube-controller-manager.service  
[Unit]
  
Description=Kubernetes Controller Manager
  
Documentation=https://github.com/kubernetes/kubernetes
  
[Service]
  
EnvironmentFile=-/opt/kubernetes/cfg/kube-controller-manager
  
ExecStart=/opt/kubernetes/bin/kube-controller-manager \
  
${KUBE_LOGTOSTDERR} \
  
${KUBE_LOG_LEVEL} \
  
${KUBE_MASTER} \
  
${KUBE_LEADER_ELECT}
  
Restart=on-failure
  
[Install]
  
WantedBy=multi-user.target
  启动服务,并设置开机启动:
# systemctl daemon-reload  
# systemctl enable kube-controller-manager
  
# systemctl restart kube-controller-manager
3.3.4 小结
  Master节点组件就全部启动了,需要注意的是服务启动顺序有依赖,先启动etcd,再启动apiserver,其他组件无顺序要求。
  查看Master节点组件进程状态:
DSC0004.png

  说明组件都在运行。
  如果启动失败,请查看启动日志,例如:
  #journalctl -u kube-apiserver
3.4  运行Node节点组件
k8s-node01# tar zxvf kubernetes-node-linux-amd64.tar.gz  
k8s-node01# mkdir -p /opt/kubernetes/{bin,cfg}
  
k8s-node01# mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/
3.4.1 kubelet
  创建kubeconfig配置文件:
# vi /opt/kubernetes/cfg/kubelet.kubeconfig  
apiVersion: v1
  
kind: Config
  
clusters:
  
  - cluster:
  
      server: http://192.168.0.211:8080
  
    name: local
  
contexts:
  
  - context:
  
      cluster: local
  
    name: local
  
current-context: local
  kubeconfig文件用于kubelet连接master apiserver。
  创建配置文件:
# vi /opt/kubernetes/cfg/kubelet  
# 启用日志标准错误
  
KUBE_LOGTOSTDERR="--logtostderr=true"
  
# 日志级别
  
KUBE_LOG_LEVEL="--v=4"
  
# Kubelet服务IP地址
  
NODE_ADDRESS="--address=192.168.0.212"
  
# Kubelet服务端口
  
NODE_PORT="--port=10250"
  
# 自定义节点名称
  
NODE_HOSTNAME="--hostname-override=192.168.0.212"
  
# kubeconfig路径,指定连接API服务器
  
KUBELET_KUBECONFIG="--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig"
  
# 允许容器请求特权模式,默认false
  
KUBE_ALLOW_PRIV="--allow-privileged=false"
  
# DNS信息
  
KUBELET_DNS_IP="--cluster-dns=10.10.10.2"
  
KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
  
# 禁用使用Swap
  
KUBELET_SWAP="--fail-swap-on=false"
  创建systemd服务文件:
# vi /lib/systemd/system/kubelet.service  
[Unit]
  
Description=Kubernetes Kubelet
  
After=docker.service
  
Requires=docker.service
  
[Service]
  
EnvironmentFile=-/opt/kubernetes/cfg/kubelet
  
ExecStart=/opt/kubernetes/bin/kubelet \
  
${KUBE_LOGTOSTDERR} \
  
${KUBE_LOG_LEVEL} \
  
${NODE_ADDRESS} \
  
${NODE_PORT} \
  
${NODE_HOSTNAME} \
  
${KUBELET_KUBECONFIG} \
  
${KUBE_ALLOW_PRIV} \
  
${KUBELET_DNS_IP} \
  
${KUBELET_DNS_DOMAIN} \
  
${KUBELET_SWAP}
  
Restart=on-failure
  
KillMode=process
  
[Install]
  
WantedBy=multi-user.target
  启动服务,并设置开机启动:
# systemctl daemon-reload  
# systemctl enable kubelet
  
# systemctl restart kubelet
3.4.2 proxy
  创建配置文件:
# vi /opt/kubernetes/cfg/kube-proxy  
# 启用日志标准错误
  
KUBE_LOGTOSTDERR="--logtostderr=true"
  
# 日志级别
  
KUBE_LOG_LEVEL="--v=4"
  
# 自定义节点名称
  
NODE_HOSTNAME="--hostname-override=192.168.0.212"
  
# API服务地址
  
KUBE_MASTER="--master=http://192.168.0.211:8080"
  创建systemd服务文件:
# vi /lib/systemd/system/kube-proxy.service  
[Unit]
  
Description=Kubernetes Proxy
  
After=network.target
  
[Service]
  
EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy
  
ExecStart=/opt/kubernetes/bin/kube-proxy \
  
${KUBE_LOGTOSTDERR} \
  
${KUBE_LOG_LEVEL} \
  
${NODE_HOSTNAME} \
  
${KUBE_MASTER}
  
Restart=on-failure
  
[Install]
  
WantedBy=multi-user.target
  启动服务,并设置开机启动:
# systemctl daemon-reload  
# systemctl enable kube-proxy
  
# systemctl restart kube-proxy
3.4.3 小结
  其他节点加入集群与node01方式相同,但需修改kubelet的--address和--hostname-override选项为本机IP。
  查看Node节点组件进程状态:
DSC0005.png

  说明组件都在运行。
  如果启动失败,请查看启动日志,例如:
  #journalctl -u kubelet
3.5 验证集群是否部署成功
  设置可执行文件到系统变量,方便使用:
# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile  
# source /etc/profile
  查看集群节点状态:
DSC0006.png

  两个节点都加入到了kubernetes集群,就此部署完成。
  本章对应视频:https://pan.baidu.com/s/1L-FjASEK849y03cfOTlU_Q
  QQ技术群,有需要的朋友可以加下:
  Docker技术交流群(719105297)
  Kubernetes技术交流群(602965977)
DSC0007.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-583644-1-1.html 上篇帖子: Kubernetes找不到/var/run/secrets/kubernetes.io/serviceaccount/ca.crt-ipcpu 下篇帖子: kubernetes安装问题记录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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