千家信息网

Kubernetes1.12 二进制集群搭建

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,一、环境准备1.1、系统环境主机名系统IP组件master01CentOS7.4172.169.18.223etcdkube-apiserverkube-controller-managerkube-
千家信息网最后更新 2026年10月31日Kubernetes1.12 二进制集群搭建

一、环境准备

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 < /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<

[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


服务 配置 文件 节点 集群 日志 地址 容器 状态 组件 错误 分配 参数 名称 服务器 模式 环境 端口 级别 主机 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海睿民互联网科技有限公司 互联网科技与金融科技 南京欣网互联网科技 汇久创客互联网科技 美国互联网黑科技 互联网科技公司做什么 济南和联互联网科技有限公司 玖二柒互联网科技公司待遇 恒银科技与互联网金融 栖莱科技互联网股份有限公司 全球顶尖互联网科技公司 乌苏新华互联网科技做什么的 迪庆互联网科技招生 华夏恒生互联网科技013171 互联网行业科技股 互联网时代的科技公司 互联网金融科技公司的优势 互联网时代高科技布局 科技互联网公司两年变化 北京瑞云互联网科技有限公司 手冲咖啡和咖啡机区别 河南云网互联网络科技有限公司 重庆威客帮互联网科技 昊天互联网科技有限公司 阿大互联网科技有限公司 21世纪互联网科技成就 互联网科技快讯热点 本届互联网大会上的黑科技 广州燕处互联网科技有限公司 米泉互联网科技专业怎么样
0