Kubernetes1.12 二进制集群搭建

发布时间:2020-07-13 13:57:21 作者:蒋将将
来源:网络 阅读:2101

一、环境准备

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

Kubernetes1.12 二进制集群搭建

Kubernetes1.12 二进制集群搭建

二、搭建服务

1、上传安装包到服务器

kubernetes-server-linux-amd64.tar.gz上传到master节点

kubernetes-node-linux-amd64.tar.gz 上传到node节点

2、安装etcd服务(三个节点的集群)

[root@master01 ~]# yum install etcd –y

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

#修改如下配置文件:

# 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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

当关闭node01节点后,选举自动切换到node02上

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

4)检查集群健康状态(在三个节点中的任意一个上面都可以查看)

# etcdctl cluster-health

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

到此,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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

注意: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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建


(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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

启动服务

[root@master01 opt]# systemctl daemon-reload

[root@master01 opt]# systemctl enable kube-scheduler.service

[root@master01 opt]# systemctl start kube-scheduler.service  

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

(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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

(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节点组件进程状态:

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建


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"

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

(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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

(4)启动服务

[root@node01 ~]# systemctl daemon-reload

[root@node01 ~]# systemctl enable kubelet.service

[root@node01 ~]# systemctl start kubelet.service

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

启动服务

[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即可。

查看状态

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

说明组件都在运行。

如果启动失败,请查看启动日志,例如:

#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"

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

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" }'

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

备注:该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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

重启docker

# systemctl restart docker

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

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

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

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段

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

4、查看宿主获取的IP段

# ps aux|grep docker|grep "bip"

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

“bip=192.169.4.1/24”这个参数,它限制了所在节点容器获得的IP范围。 该IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复。


Kubernetes1.12 二进制集群搭建

5、验证集群是否部署成功

# kubectl get nodes

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建

# kubectl get cs

Kubernetes1.12 二进制集群搭建Kubernetes1.12 二进制集群搭建


推荐阅读:
  1. 如何用二进制包部署Kubernetes集群?
  2. Kubernetes V1.12 二进制 部署多Master

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

etcd集群 flannel集群 k8s集群

上一篇:netty系列之Java BIO NIO AIO进化史

下一篇:如何实现C#使用Reflect获取dll文件中的类型并调用?

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》