十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
一、环境准备
创新互联公司主营阳明网站建设的网络公司,主营网站建设方案,App定制开发,阳明h5小程序定制开发搭建,阳明网站营销推广欢迎阳明等地区企业咨询
1.1、系统环境
主机名 | 系统 | IP | 组件 |
master01 | CentOS7.4 | 172.169.18.223 | etcd kube-apiserver kube-controller-manager kube-scheduler |
node01 | CentOS7.4 | 172.169.18.230 | etcd kubelet kube-proxy docker |
node02 | CentOS7.4 | 172.169.18.232 | etcd kubelet kube-proxy docker |
1.2、关闭swap
# swapoff -a
# sed -i 's/.*swap.*/#&/' /etc/fstab
1.3、关闭防火墙和selinux
1.4、配置转发参数
cat <
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# sysctl --system
1.5、下载安装包
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md#downloads-for-v1122
二、搭建服务
1、上传安装包到服务器:
kubernetes-server-linux-amd64.tar.gz上传到master节点
kubernetes-node-linux-amd64.tar.gz 上传到node节点
2、安装etcd服务(三个节点的集群)
[root@master01 ~]# yum install etcd –y
#修改如下配置文件:
# vim /etc/etcd/etcd.conf
#maser01节点
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://127.0.0.1:4001"
ETCD_NAME="master01"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_CLUSTER="master01=http://172.169.18.223:2380,node01=http://172.169.18.230:2380,node02=http://172.169.18.232:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
#node01节点
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://127.0.0.1:4001"
ETCD_NAME="node01"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_CLUSTER="master01=http://172.169.18.223:2380,node01=http://172.169.18.230:2380,node02=http://172.169.18.232:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
#node02
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_NAME="node02"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_CLUSTER="master01=http://172.169.18.223:2380,node01=http://172.169.18.230:2380,node02=http://172.169.18.232:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
按如上配置分别启动集群,启动集群后,将会进入集群选举状态,若出现大量超时,则需要检查主机的防火墙是否关闭,或主机之间是否能通过2380端口通信,集群建立后通过以下命令检查集群状态。
3)在任意节点查看集群状态
# etcdctl member list
当关闭node01节点后,选举自动切换到node02上
4)检查集群健康状态(在三个节点中的任意一个上面都可以查看)
# etcdctl cluster-health
到此,etcd集群搭建完毕!!!
3、运行Master节点组件
3.1、解压,复制配置文件
[root@master01 opt]# tar -zxvf kubernetes-server-linux-amd64.tar.gz
[root@master01 opt]# mkdir -p /opt/kubernetes/{bin,cfg}
[root@master01 opt]# mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin
3.2、apiserver服务
(1)配置文件
[root@master01 opt]# cat /opt/kubernetes/cfg/kube-apiserver
#日志级别
KUBE_LOG_LEVEL="--v=4"
#Etcd服务地址
KUBE_ETCD_SERVERS="--etcd-servers=http://172.169.18.223: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=172.169.18.223"
#允许容器请求特权模式,默认false
KUBE_ALLOW_PRIV="--allow-privileged=false"
#集群分配的IP范围,自定义但是要跟后面的kubelet(服务节点)的配置DNS在一个区间
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=172.169.0.0/16"
(2)创建systemd服务文件:
cat >/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 EOF (3)启动服务,并设置开机启动: [root@master01 opt]# systemctl daemon-reload [root@master01 opt]# systemctl enable kube-apiserver.service [root@master01 opt]# systemctl start kube-apiserver.service 注意:apiserver默认支持etcd3,如果是etcd2,需启动时指定版本选项--storage-backend=etcd2 3.3、scheduler服务 (1)创建配置文件 cat >/opt/kubernetes/cfg/kube-scheduler < KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=4" KUBE_MASTER="--master=172.169.18.223:8080" KUBE_LEADER_ELECT="--leader-elect" EOF (2)创建服务器启动文件 [root@master01 opt]# cat>/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 EOF 启动服务 [root@master01 opt]# systemctl daemon-reload [root@master01 opt]# systemctl enable kube-scheduler.service [root@master01 opt]# systemctl start kube-scheduler.service 3.4、contorller-manager服务 (1)创建文件 cat > /opt/kubernetes/cfg/kube-controller-manager< KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=4" KUBE_MASTER="--master=172.169.18.223:8080" EOF (2)创建系统启动文件 cat > /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 EOF 启动服务 [root@master01 opt]# systemctl daemon-reload [root@master01 opt]# systemctl enable kube-controller-manager.service [root@master01 opt]# systemctl start kube-controller-manager.service 3.5、kubelet服务 (1)kubelet.kubeconfig配置文件 # vim /opt/kubernetes/cfg/kubelet.kubeconfig apiVersion: v1 kind: Config clusters: - cluster: server: http://172.169.18.223:8080 name: local contexts: - context: cluster: local name: local current-context: local (2)kubelet配置文件 # vim /opt/kubernetes/cfg/kubelet # 启用日志标准错误 KUBE_LOGTOSTDERR="--logtostderr=true" # 日志级别 KUBE_LOG_LEVEL="--v=4" # Kubelet服务IP地址 NODE_ADDRESS="--address=172.169.18.223" # Kubelet服务端口 NODE_PORT="--port=10250" # 自定义节点名称 NODE_HOSTNAME="--hostname-override=172.169.18.223" # kubeconfig路径,指定连接API服务器 KUBELET_KUBECONFIG="--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig" # 允许容器请求特权模式,默认false KUBE_ALLOW_PRIV="--allow-privileged=false" # DNS信息 KUBELET_DNS_IP="--cluster-dns=172.169.18.2" KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local" # 禁用使用Swap KUBELET_SWAP="--fail-swap-on=false" (3)kubelet systemd配置文件 [root@master ~]# vim /usr/lib/systemd/system/kubelet.service [Unit] Description=Kubernetes Kubelet After=docker.service Requires=docker.service [Service] EnvironmentFile=-/opt/kubernetes/cfg/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 (4)启动服务 [root@master ~]# systemctl enable kubelet [root@master ~]# systemctl start kubelet 至此master就已经配置完成,如若配置中有错误,可以通过#journalctl -u 服务名称查看报错。 为方便使用添加环境变量 [root@master01 opt]# echo "export PATH=\$PATH:/opt/kubernetes/bin" >> /etc/profile [root@master01 opt]# source /etc/profile 3、小结 Master节点组件就全部启动了,需要注意的是服务启动顺序有依赖,先启动etcd,再启动apiserver,其他组件无顺序要求。 查看Master节点组件进程状态: 4、node节点(docker1.18环境) #yum install -y yum-utils device-mapper-persistent-data lvm2 4.1、解决复制 [root@node01 opt]# tar -zxvf kubernetes-node-linux-amd64.tar.gz [root@node01 opt]# mkdir -p /opt/kubernetes/{bin,cfg} [root@node01 opt]# mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/ 4.2、kubelet服务 (1)创建kubeconfig配置文件: [root@node01 opt]# vim /opt/kubernetes/cfg/kubelet.kubeconfig apiVersion: v1 kind: Config clusters: - cluster: server: http://172.169.18.223:8080 name: local contexts: - context: cluster: local name: local current-context: local 备注:kubeconfig文件用于kubelet连接master apiserver。 (2)创建配置文件: [root@slave2 opt]# cat /opt/kubernetes/cfg/kubelet # 启用日志标准错误 KUBE_LOGTOSTDERR="--logtostderr=true" # 日志级别 KUBE_LOG_LEVEL="--v=4" # Kubelet服务IP地址 NODE_ADDRESS="--address=172.169.18.230" # Kubelet服务端口 NODE_PORT="--port=10250" # 自定义节点名称 NODE_HOSTNAME="--hostname-override=172.169.18.230" # kubeconfig路径,指定连接API服务器 KUBELET_KUBECONFIG="--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig" # 允许容器请求特权模式,默认false KUBE_ALLOW_PRIV="--allow-privileged=false" # DNS信息 KUBELET_DNS_IP="--cluster-dns=172.169.18.2" KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local" # 禁用使用Swap KUBELET_SWAP="--fail-swap-on=false" (3)创建systemd服务文件 cat>/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 EOF (4)启动服务 [root@node01 ~]# systemctl daemon-reload [root@node01 ~]# systemctl enable kubelet.service [root@node01 ~]# systemctl start kubelet.service 4.3、kube-proxy服务 (1)创建配置文件 [root@node01 cfg]# vim kube-proxy # 启用日志标准错误 KUBE_LOGTOSTDERR="--logtostderr=true" # # 日志级别 KUBE_LOG_LEVEL="--v=4" # # 自定义节点名称 NODE_HOSTNAME="--hostname-override=172.169.18.230" # # API服务地址 KUBE_MASTER="--master=http://172.169.18.223:8080" (2)创建systemd服务文件 [root@node01 ]# cat /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 启动服务 [root@node01 ~]# systemctl daemon-reload [root@node01 ~]# systemctl enable kube-proxy.service [root@node01 ~]# systemctl start kube-proxy.service 4、小结 其他节点加入集群与node01方式相同,但需修改kubelet的--address和--hostname-override选项为本机IP即可。 查看状态 说明组件都在运行。 如果启动失败,请查看启动日志,例如: #journalctl -u kubelet 三、安装flannel服务搭建(3个节点) 3.1、安装Flannel服务 1)yum安装flannel # yum install flannel -y 2)配置flannel文件 # cp /etc/sysconfig/flanneld /etc/sysconfig/flanneld_bak # vim /etc/sysconfig/flanneld FLANNEL_ETCD_ENDPOINTS="http://172.169.18.223:2379,http://172.169.18.230:2379,http://172.169.18.232:2379" 3)配置etcd中关于flannel的key(只能在etcd节点上操作) Flannel使用Etcd进行配置,来保证多个Flannel实例之间的配置一致性,所以需要在etcd上进行如下配置('/atomic.io/network/config'这个key与上面的/etc/sysconfig/flannel中的配置项FLANNEL_ETCD_PREFIX是相对应的,错误的话启动就会出错): # etcdctl mkdir /atomic.io/network # etcdctl mk /atomic.io/network/config '{ "Network": "192.169.0.0/16" }' 备注:该ip网段可以任意设定,随便设定一个网段都可以。容器的ip就是根据这个网段进行自动分配的,ip分配后,容器一般是可以对外联网的(网桥模式,只要宿主机能上网就可以) 4)配置docker启动文件 # vim /usr/lib/systemd/system/docker.service #添加如下参数 EnvironmentFile=-/etc/sysconfig/flanneld EnvironmentFile=-/run/flannel/subnet.env ExecStart=/usr/bin/dockerd --bip=${FLANNEL_SUBNET} 保持,重启docker服务 5)启动服务 [root@master ~]# systemctl start flanneld.service [root@master ~]# systemctl enable flanneld.service 重启docker # systemctl restart docker 3、在node01和node02节点配置 3.1、安装Flannel服务 1)yum安装flannel # yum install flannel -y 2)配置flannel文件 # cp /etc/sysconfig/flanneld /etc/sysconfig/flanneld_bak # vim /etc/sysconfig/flanneld 34)配置docker启动文件 # vim /usr/lib/systemd/system/docker.service #添加如下参数 EnvironmentFile=-/etc/sysconfig/flanneld EnvironmentFile=-/run/flannel/subnet.env ExecStart=/usr/bin/dockerd --bip=${FLANNEL_SUBNET} 保持,重启docker服务 4)启动服务 [root@slave1 ~]# systemctl start flanneld.service [root@slave1 ~]# systemctl enable flanneld.service 重启docker,获取分配的ip段 4、查看宿主获取的IP段 # ps aux|grep docker|grep "bip" “bip=192.169.4.1/24”这个参数,它限制了所在节点容器获得的IP范围。 该IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复。 5、验证集群是否部署成功 # kubectl get nodes # kubectl get cs
当前文章:Kubernetes1.12二进制集群搭建
路径分享:http://mswzjz.cn/article/jjechh.html