首页
首页

kubernetes(k8s)集群一键部署(附源码)

对于kubernetes集群部署,一直都是按部就班的一步一步的部署,这几天在更新公司的测试kubernetes集群时,就想到既然是重复工作,为什么不能做成一键部署呢,所以就有了这篇文章。

k8s集群部署,一共需要四个组件,docker、etdc、flannel、kubernetes的各个服务;docker是提供基础服务搭建、etcd提供集群的高可用、flannel提供集群内部网络通信,kubernetes负责统一的调度与分配。

以上是个人对k8s集群的一个看法,如有不正确的地方欢迎大家指正。

那么会到正题,既然要实现k8s集群一键部署,那么刚刚上面提到的四个组件就是必须要安装的。

etcd集群一键部署我在ETCD集群一键部署(附源码)这篇文章中已经写到了,大家可以直接去那篇文章,根据操作执行。

以下分别为flannel与k8s集群的一键部署脚本

flannel部署脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/sh
# 检查etcd是否安装
flanneld --version
if [[ $? -eq 0 ]];
then
echo 'flanneld 已经安装了,请卸载重新安装!!!'
exit
else
yum -y install flannel kubernetes
fi

# 以下表示将配置文件输出到指定目录
# 三行的意思分别是 配置etcd_list,配置flannled获取网络配合的key ,配置flanneld的网卡
tee /etc/sysconfig/flanneld <<-'EOF'
FLANNEL_ETCD="ETCD_LIST"
FLANNEL_ETCD_KEY="ETCD_KEY_VALUES"
FLANNEL_OPTIONS="-iface=eth0"
EOF

# ETCD_LIST 表示所有ETCD集群列表
# ETCD_KEY_VALUES 表示在ETCD中创建的网络节点key值
# -iface=eth0 表示配置flanneld的网络使用网卡

# 以下表示替换各种关键字
sed -i 's%ETCD_LIST%'$1'%g' /etc/sysconfig/flanneld # 表示替换本机ip
sed -i 's%ETCD_KEY_VALUES%'$2'%g' /etc/sysconfig/flanneld # 表示替换所有etcd集群列表
# 由于使用sed 在使用/做分隔符是出现报错:sed: -e expression #1, char 19: unknown option to `s' 所以在此将/替换成成%

# 输出现在的网卡路由表
echo "输出现在的网卡路由表"
route -n
# 设置开机启动,并启动
systemctl enable flanneld
systemctl start flanneld
systemctl restart docker
# 输出启动完成后的网卡路由表,方便检查是否成功
echo "下方为输出的路由表,请检查flanneld是否启动成功"
route -n
# 单纯检查flanneld是否安装成功
flanneld --version
if [[ $? -eq 0 ]];
then
echo 'flanneld 安装完成!!'
else
echo 'flanneld 安装失败!!'
fi

在flannel安装时,我把kubernetes一起安装了,因为在安装kubernetes时会自动安装docker,所以docker就不需要安装了。 通过route -n查看flannel是否安装成功

以下为k8s集群一键安装脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/bash
# 获取本机ip地址
export HOST_IP=$(ifconfig eth0 |grep 'inet'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $2}')
# 输出本机ip地址
echo '本机ip地址:' $HOST_IP

tee /etc/kubernetes/apiserver <<'EOF'
KUBE_API_ADDRESS="--insecure-bind-address=HOST_IP"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=ETCD_SERVER_LIST"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_API_ARGS=""
EOF

tee /etc/kubernetes/config <<'EOF'
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=API_SERVER_LIST"
EOF

tee /etc/kubernetes/kubelet <<'EOF'
KUBELET_ADDRESS="--address=HOST_IP"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=HOST_IP"
KUBELET_API_SERVER="--api-servers=API_SERVER_LIST"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""
EOF

sed -i 's%HOST_IP%'$HOST_IP'%g' /etc/kubernetes/apiserver
sed -i 's%ETCD_SERVER_LIST%'$1'%g' /etc/kubernetes/apiserver
sed -i 's%HOST_IP%'$HOST_IP'%g' /etc/kubernetes/config
sed -i 's%API_SERVER_LIST%'$2'%g' /etc/kubernetes/config
sed -i 's%HOST_IP%'$HOST_IP'%g' /etc/kubernetes/kubelet
sed -i 's%API_SERVER_LIST%'$2'%g' /etc/kubernetes/kubelet



for Dzer0 in kube-apiserver kube-controller-manager kube-scheduler kubelet kube-proxy;
do
systemctl enable $Dzer0
systemctl restart $Dzer0
systemctl status $Dzer0
done
kubectl -s $HOST_IP:8080 get nodes

echo "kubernetes安装完成"

下面分别说下用法:

flannel安装脚本执行方法:

在安装flannel之前 需要在etcd中创建网络节点 etcdctl mk /k8s.com/network/config '{"Network":"172.66.0.0/16"}',flannel通过该网络节点拉取配置

1
sh flannled_install.sh http://etcd1_ip:prot,http://etcd2_ip:port,http://etcd3_ip:port /k8s.com/network

k8s集群一键部署脚本:

1
sh kubernetes_install.sh http://etcd1_ip:prot,http://etcd2_ip:port,http://etcd3_ip:port http://k8s_api:8080

k8sapi需要填写HA地址,后端对应k8s所有的api地址。

支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫