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]