您好,登录后才能下订单哦!
一、环境准备
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 <<EOF > /etc/sysctl.d/k8s.conf
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<<EOF
[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 <<EOF
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<<EOF
[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<<EOF
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<<EOF
[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<<EOF
[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
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。