chenjiali 发表于 2019-2-15 17:53:43

Centos7 Kubernetes1.8+docker容器集群

Kubernetes(k8s)
  Kubernetes官网
  Kubernetes使用教程
  Docker-ce安装官方教程
Kubernetes简介
  Kubernetes是google开源的多主机容器管理工具, 简称:k8s,它带有人性化图形管理界面, 它在开源社区很受欢迎github上已经有了20000+的收藏,和7000+的fork。
Kubernetes其特性主要包括:
  1、可以非常轻松地开发复杂系统;
  2、Kubernetes为微服务架构;
  3、系统可以随时随地整体“搬迁”到公有云上;
  4、Kubernetes系统架构具备了超强的横向扩容能力。
Kubernetes使用的资源对象
  在Kubernetes中,Node、Pod、Replication Controller、Service等概念都可以看作一种资源对象,通过Kubernetes提供的Kubectl工具或者API调用进行操作,并保存在etcd中。
实验环境
  系统版本:centos7x3.10.0-514.el7.x86_64
  Kubernetes版本:v1.8.3
  Kubernetes-node版本:v1.8.3
  Docker版本:docker-ce.x86_64 0:18.03.1.ce-1.el7.centos
  注:以上最好两个均采用当前最新稳定版本。
  关闭防火墙并禁止开机自启
  systemctl stop firewalld.service
systemctl disable firewalld
  关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
  重启 reboot
搭建k8s集群
master主机(IP:192.168.152.170)
  安装组件:etcd   kube-apiserver   kube-controller-manager    kube-scheduler
1、安装kubernetes服务端
  1)下载二进制源码包
  wgethttps://storage.googleapis.com/kubernetes-release/release/v1.8.3/kubernetes-server-linux-amd64.tar.gz
注:直接在master服务器上执行命令下载即可!
  2)解压源码包
  tar zxf kubernetes-server-linux-amd64.tar.gz
http://i2.运维网.com/images/blog/201809/25/f2527de61d077472aa9bbf1f892cfef6.png
  3)递归创建kubernetes运行文件存放目录
  mkdir -p /k8s/{bin,cfg}
  4)将解压目录里的文件移动到新创建的目录里
  mvkubernetes/server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler,kubectl}   /k8s/bin/
http://i2.运维网.com/images/blog/201809/25/90be87e1d56d3f489175f7eec0715a47.png
2、安装etcd组件(默认版本:etcd.x86_64 0:3.2.22-1.el7)
  1)安装etcd
  yum -y install etcd
  2)编辑etcd的配置文件
  vi /etc/etcd/etcd.conf
  ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
http://i2.运维网.com/images/blog/201809/25/778da58038361b4d03f658799f93236e.png
注:Ubuntu系统etcd配置文件在/etc/default/etcd。
  3)启动etcd服务
  #设置etcd服务开机自启
  systemctl enable etcd
  #启动etcd服务
  systemctl startetcd
3、配置kube-apiserver组件
  1)创建kube-apiserver配置文件
  vi /k8s/cfg/kube-apiserver
  #启用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志级别
KUBE_LOG_LEVEL="--v=4"
#Etcd服务地址
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.152.170: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.152.170"
#允许容器请求特权模式,默认false
KUBE_ALLOW_PRIV="--allow-privileged=false"
#集群分配的IP范围
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.0.100.0/24"
http://i2.运维网.com/images/blog/201809/25/79b0c16bfdb115c42edfd98a1be2869f.png
  2)创建kube-apiserver的systemd服务启动文件
  vi /lib/systemd/system/kube-apiserver.service
  
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes

EnvironmentFile=-/k8s/cfg/kube-apiserver
#ExecStart=/k8s/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
ExecStart=/k8s/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

WantedBy=multi-user.target
http://i2.运维网.com/images/blog/201809/25/e1f106fc7b529b1af7076dc3b692f7e7.png
  3)启动kube-apiserver服务
  #重新加载kube-apiserver服务守护进程
  systemctl daemon-reload
  #设置kube-apiserver服务开机自启
  systemctl enable kube-apiserver
  #重启kube-apiserver服务
  systemctl restart kube-apiserver
  注:apiserver默认支持etcd3,如果是etcd2,需启动时指定版本选项--storage-backend=etcd2
4、配置kube-scheduler组件
  1)创建kube-scheduler配置文件
  vi /k8s/cfg/kube-scheduler
  #启用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志级别
KUBE_LOG_LEVEL="--v=4"
#k8s-master服务地址
KUBE_MASTER="--master=192.168.152.170:8080"
#指定master为控制台
KUBE_LEADER_ELECT="--leader-elect"
http://i2.运维网.com/images/blog/201809/25/a43f7a6d8677282756b3979e6c3bf7a4.png
  2)创建kube-scheduler的systemd服务启动文件
  vi /lib/systemd/system/kube-scheduler.service
  
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

EnvironmentFile=/k8s/cfg/kube-scheduler
ExecStart=/k8s/bin/kube-scheduler \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure

WantedBy=multi-user.target
http://i2.运维网.com/images/blog/201809/25/c4f2e7f6a0159afc3b50fb461e8b1985.png
  3)启动kube-scheduler服务
  #重新加载kube-scheduler服务守护进程
  systemctl daemon-reload
  #设置kube-scheduler服务开机自启
  systemctl enable kube-scheduler
  #重新启动kube-scheduler服务
  systemctl restart kube-scheduler
5、配置kube-controller-manager组件
  1)创建kube-controller-manager配置文件
  vi /k8s/cfg/kube-controller-manager
  #启用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志级别
KUBE_LOG_LEVEL="--v=4"
#k8s-master服务地址
KUBE_MASTER="--master=192.168.152.170:8080"
http://i2.运维网.com/images/blog/201809/25/621ccfbf3dc99e0855593fa55c6366f7.png
  2)创建kube-controller-manager的systemd服务启动文件
  vi /lib/systemd/system/kube-controller-manager.service
  
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes

EnvironmentFile=/k8s/cfg/kube-controller-manager
ExecStart=/k8s/bin/kube-controller-manager \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure

WantedBy=multi-user.target
http://i2.运维网.com/images/blog/201809/25/f535bcd4e9b9170ac31542d69e1efaa6.png
  3)启动kube-controller-manager服务
  #重新加载kube-controller-manager服务守护进程
  systemctl daemon-reload
  #设置kube-controller-manager服务开机自启
  systemctl enable kube-controller-manager
  #重新启动kube-controller-manager服务
  systemctl restart kube-controller-manager
  注:master节点组件全部启动了,需要注意的是服务启动顺序有依赖,先启动etcd,再启动apiserver,其他组件无顺序要求。
  查看master节点组件进程状态ps -ef | grep kube
http://i2.运维网.com/images/blog/201809/25/5da42109e23e1981fc206946fc4ea2e0.png
注:以上截图说明所有组件都正常运行!如果单独一个组件启动失败可以使用k8s自带查看日志命令。
6、K8s查看具体组件日志的命令
  journalctl –u etcd
  journalctl -u kube-apiserver
  journalctl -u kube-controller-manager
  journalctl -u kube-scheduler
node-1主机(192.168.152.168)
  安装组件:kubelet    kube-proxy    docker
1、安装kubernetes的node-1节点
  1)下载二进制源码包
  wgethttps://storage.googleapis.com/kubernetes-release/release/v1.8.3/kubernetes-node-linux-amd64.tar.gz
注:直接在node-1服务器上执行命令下载即可!
  2)解压源码包
  tar zxf kubernetes-node-linux-amd64.tar.gz
http://i2.运维网.com/images/blog/201809/25/1921af78555c09cb1c4b7cc900fb8062.png
  3)递归创建kubernetes运行文件存放目录
  mkdir -p /k8s/{bin,cfg}
  4)将解压目录里的文件移动到新创建的目录里
  mvkubernetes/node/bin/{ kubectl,kubelet,kube-proxy}   /k8s/bin/
  5)创建连接master apiserver配置文件
  vi/k8s/cfg/kubelet.kubeconfig
  apiVersion: v1
kind: Config
clusters:

[*]cluster:
server: http://192.168.152.170:8080
name: local
contexts:
[*]context:
cluster: local
name: local
current-context: local
http://i2.运维网.com/images/blog/201809/25/fe05065a7eb2ee83cd48b0826318d6fe.png
注:kubeconfig文件用于kubelet连接master apiserver的。
  6)创建kubelet配置文件
  vi /k8s/cfg/kubelet
  #启用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志级别
KUBE_LOG_LEVEL="--v=4"
#Kubelet服务IP地址
NODE_ADDRESS="--address=192.168.152.168"
#Kubelet服务端口
NODE_PORT="--port=10250"
#自定义节点名称
NODE_HOSTNAME="--hostname-override=192.168.152.168"
#kubeconfig路径,指定连接API服务器
KUBELET_KUBECONFIG="--kubeconfig=/k8s/cfg/kubelet.kubeconfig"
#允许容器请求特权模式,默认false
KUBE_ALLOW_PRIV="--allow-privileged=false"
#DNS信息
KUBELET_DNS_IP="--cluster-dns=10.0.100.2"
KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
#禁用使用Swap
KUBELET_SWAP="--fail-swap-on=false"
http://i2.运维网.com/images/blog/201809/25/f803ad39886e99d0f5fd1cbad7259a52.png
  7)创建kubelet服务的systemd启动文件
  vi /lib/systemd/system/kubelet.service
  
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service

EnvironmentFile=-/k8s/cfg/kubelet
ExecStart=/k8s/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

WantedBy=multi-user.target
http://i2.运维网.com/images/blog/201809/25/0e5687dd2a26ac1089e598f64b353248.png
  8)启动kubelet服务
  #重新加载kubelet服务守护进程
  systemctl daemon-reload
  #设置kubelet服务开机自启
  systemctl enable kubelet
  #重新启动kubelet服务
  systemctl restart kubelet
2、配置kube-proxy组件
  1)创建kube-proxy配置文件
  vi/k8s/cfg/kube-proxy
  #用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
#志级别
KUBE_LOG_LEVEL="--v=4"
#定义节点名称
NODE_HOSTNAME="--hostname-override=192.168.152.168"
#PI服务地址
KUBE_MASTER="--master=http://192.168.152.170:8080"
http://i2.运维网.com/images/blog/201809/25/23de976d3db6ecc8dda10b851aa34766.png
  2)创建kube-proxy服务的systemd服务启动文件
  vi /lib/systemd/system/kube-proxy.service
  
Description=Kubernetes Proxy
After=network.target

EnvironmentFile=/k8s/cfg/kube-proxy
ExecStart=/k8s/bin/kube-proxy \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_HOSTNAME} \
${KUBE_MASTER}
Restart=on-failure

WantedBy=multi-user.target
http://i2.运维网.com/images/blog/201809/25/ee32cfe6be0e5564538fd6c54ff00965.png
  3)启动kube-proxy服务
  #重新加载kube-proxy服务守护进程
  systemctl daemon-reload
  #设置kube-proxy服务开机自启
  systemctl enable kube-proxy
  #重启kube-apiserver服务
  systemctl restart kube-proxy
3、安装docker(docker-ce.x86_64 0:18.03.1.ce-1.el7.centos)
  1)安装docker-ce的yum源
  //下载yum源到本地
  wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  //移动yum源到/etc/yum.repos.d/目录下
  mv docker-ce.repo /etc/yum.repos.d/
http://i2.运维网.com/images/blog/201809/25/fabde60e106ec9da22452234b64157bf.png
  2)从高到低排列显示docker版本
  yum list docker-ce --showduplicates | sort -r
http://i2.运维网.com/images/blog/201809/25/e3666b66a087835b61c79fa631f8f4cb.png
注:在正式环境,必须使用统一的稳定版本,而不是总使用最新(这样各host上的版本可能不一致)
  3)安装docker-ce .x86_64-18.03.1.ce-1.el7.centos
  yum -y install docker-ce .x86_64-18.03.1.ce-1.el7.centos
http://i2.运维网.com/images/blog/201809/25/43b2466605ddf0fddca4aa7f17e0eca0.png
  4)启动docker服务
  //设置docker开机自启
  systemctlenable docker
  //启动docker服务
  systemctlstart docker
  //重启docker服务
  systemctlrestart docker
node-2主机(192.168.152.169)
  安装组件:kubelet    kube-proxy    docker
1、安装kubernetes的node-2节点
  1)下载二进制源码包
  wget   https://storage.googleapis.com/kubernetes-release/release/v1.8.3/kubernetes-node-linux-amd64.tar.gz
注:直接在node-2服务器上执行命令下载即可!
  2)解压源码包
tar zxf kubernetes-node-linux-amd64.tar.gz
http://i2.运维网.com/images/blog/201809/25/8d84891c3e5a674bc281c3551be5193c.png
  3)递归创建kubernetes运行文件存放目录
  mkdir -p /k8s/{bin,cfg}
  4)将解压目录里的文件移动到新创建的目录里
  mvkubernetes/server/bin/{ kubectl,kubelet,kube-proxy}   /k8s/bin/
  5)创建连接master apiserver配置文件
  vi/k8s/cfg/kubelet.kubeconfig
  apiVersion: v1
kind: Config
clusters:

[*]cluster:
server: http://192.168.152.170:8080
name: local
contexts:
[*]context:
cluster: local
name: local
current-context: local
http://i2.运维网.com/images/blog/201809/25/6e53d22517e12c0bcec5678734da3c02.png
注:kubeconfig文件用于kubelet连接master apiserver的。
  6)创建kubelet配置文件
  vi /k8s/cfg/kubelet
  #启用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志级别
KUBE_LOG_LEVEL="--v=4"
#Kubelet服务IP地址
NODE_ADDRESS="--address=192.168.152.169"
#Kubelet服务端口
NODE_PORT="--port=10250"
#自定义节点名称
NODE_HOSTNAME="--hostname-override=192.168.152.169"
#kubeconfig路径,指定连接API服务器
KUBELET_KUBECONFIG="--kubeconfig=/k8s/cfg/kubelet.kubeconfig"
#允许容器请求特权模式,默认false
KUBE_ALLOW_PRIV="--allow-privileged=false"
#DNS信息
KUBELET_DNS_IP="--cluster-dns=10.0.100.2"
KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
#禁用使用Swap
KUBELET_SWAP="--fail-swap-on=false"
http://i2.运维网.com/images/blog/201809/25/f7c1029dbcd5c43b1f508e375c515d8c.png
  7)创建kubelet服务的systemd启动文件
  vi /lib/systemd/system/kubelet.service
  
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service

EnvironmentFile=-/k8s/cfg/kubelet
ExecStart=/k8s/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

WantedBy=multi-user.target
http://i2.运维网.com/images/blog/201809/25/21df6d1863cf49021118f106cd0ecd85.png
  8)启动kubelet服务
  #重新加载kubelet服务守护进程
  systemctl daemon-reload
  #设置kubelet服务开机自启
  systemctl enable kubelet
  #重新启动kubelet服务
  systemctl restart kubelet
2、配置kube-proxy组件
  1)创建kube-proxy配置文件
  vi/k8s/cfg/kube-proxy
#启用日志标准错误
KUBE_LOGTOSTDERR="--logtostderr=true"
#日志级别
KUBE_LOG_LEVEL="--v=4"
#自定义节点名称
NODE_HOSTNAME="--hostname-override=192.168.152.169"
#API服务地址
KUBE_MASTER="--master=http://192.168.152.170:8080"
http://i2.运维网.com/images/blog/201809/25/a6db5c195a8708c88cb3e6e28dcc77ac.png
  2)创建kube-proxy服务的systemd服务启动文件
  vi /lib/systemd/system/kube-proxy.service
  
Description=Kubernetes Proxy
After=network.target

EnvironmentFile=/k8s/cfg/kube-proxy
ExecStart=/k8s/bin/kube-proxy \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_HOSTNAME} \
${KUBE_MASTER}
Restart=on-failure

WantedBy=multi-user.target
http://i2.运维网.com/images/blog/201809/25/ff8bc0b6c4979453e8cbe65f16292c89.png
  3)启动kube-proxy服务
  #重新加载kube-proxy服务守护进程
  systemctl daemon-reload
  #设置kube-proxy服务开机自启
  systemctl enable kube-proxy
  #重启kube-apiserver服务
  systemctl restart kube-proxy
3、安装docker(docker-ce.x86_64 0:18.03.1.ce-1.el7.centos)
  1)安装docker-ce的yum源
  //下载yum源到本地
  wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  //移动yum源到/etc/yum.repos.d/目录下
  mv docker-ce.repo /etc/yum.repos.d/
http://i2.运维网.com/images/blog/201809/25/4cc32d0ca262756031da7795a8c27b0b.png
  2)从高到低排列显示docker版本
  yum list docker-ce --showduplicates | sort -r
http://i2.运维网.com/images/blog/201809/25/520c173caece7d6d62821aad46117997.png
注:在正式环境,必须使用统一的稳定版本,而不是总使用最新(这样各host上的版本可能不一致)
  3)安装docker-ce .x86_64-18.03.1.ce-1.el7.centos
  yum -y install docker-ce .x86_64-18.03.1.ce-1.el7.centos
http://i2.运维网.com/images/blog/201809/25/00d2a5e471d29dc816401a9c11640e53.png
  4)启动docker服务
  //设置docker开机自启
  systemctlenable docker
  //启动docker服务
  systemctlstart docker
  //重启docker服务
  systemctlrestart docker
验证群集部署是否成功
1、设置k8s命令的环境变量
  echo "export PATH=$PATH:/k8s/bin" >> /etc/profile
  注:有几台机器就执行几遍,当前有三台机器上都执行!
2、让环境变量立即生效
  source /etc/profile
3、在master节点上用命令查看群节点状态
  kubectl get nodes
http://i2.运维网.com/images/blog/201809/25/dda3f9ffb82f229ce18cb95e9776a81e.png
注:能看到当前你所添加的所有节点,表示群集部署完成!
  参考文章:Kubernetes(K8S)集群管理Docker容器(部署篇)



页: [1]
查看完整版本: Centos7 Kubernetes1.8+docker容器集群