0%

利用Kubeadm创建Kubernetes集群之Centos,你会了吗?

前记

Kubeadm是一个工具,通过提供kubeadm initkubeadm join来作为创建Kubernetes集群的最佳实践“快速路径”

简单理解就跟Docker swarm差不多吧,KubeadmGA版本都已经发布了,那还等什么呢?

部署

资源版本
  1. CentOS 7.6 64
  2. Kubernetes version: v1.13.2
  3. Docker version 18.06

这里为什么使用Docker 18.06是因为kubeadm now properly recognizes Docker 18.09.0 and newer, but still treats 18.06 as the default supported version.

所以我们默认还是使用18.06

服务器

这里我们使用CentOS 7.6 64,同时测试环境为阿里云服务器

IP AddressHostnameCPUMemory
172.16.1.86Master2C4G
172.16.1.87Node12C4G
172.16.1.88Node22C4G

这里注意一下服务器系统,目前官方已支持Ubuntu 16.04+Debian 9CentOS 7RHEL 7

配置

关闭防火墙

1
2
3
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
systemctl stop firewalld && systemctl disable firewalld

设定/etc/hosts
1
2
3
172.16.1.86 Master
172.16.1.87 Node1
172.16.1.88 Node2

禁用Swap
1
swapoff -a && sysctl -w vm.swappiness=0

将配置中net.bridge.bridge-nf-call-iptables被设为1
1
2
3
4
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

安装Docker

在3台服务器上都安装上Docker,此次实验Docker版本:Docker version 18.06

Centos Docker 安装文档

安装完成启动Docker

1
systemctl enable docker.service

安装K8s

在3台服务器上配置YUM源为阿里镜像源

1
2
3
4
5
6
7
8
9
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

您需要在每台机器上都安装以下的软件包:

  1. kubeadm: 用来初始化集群的指令。
  2. kubelet: 在集群中的每个节点上用来启动podcontainer等。
  3. kubectl: 用来与集群通信的命令行工具。
1
2
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet

版本:Kubernetes version: v1.13.2

Master

Master节点上配置kubelet所需的cgroup驱动

1
2
3
cat <<EOF >  /var/lib/kubelet/kubeadm-flags.env
KUBELET_EXTRA_ARGS=--cgroup-driver=cgroupfs
EOF

需要重启kubelet
1
2
systemctl daemon-reload
systemctl restart kubelet

k8s.gcr.io镜像本地化
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
kubeadm config images list //查看所需要的镜像

// 编辑脚本从hub获取镜像
vim k8s.sh

#!/bin/bash
docker pull coredns/coredns:1.2.6
docker tag coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
docker rmi coredns/coredns:1.2.6
images=(
kube-apiserver:v1.13.2
kube-controller-manager:v1.13.2
kube-scheduler:v1.13.2
kube-proxy:v1.13.2
pause:3.1
etcd:3.2.24
)
for imageName in ${images[@]} ; do
docker pull mirrorgooglecontainers/$imageName
docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName
docker rmi mirrorgooglecontainers/$imageName
done

// 编辑脚本权限
chmod +x k8s.sh

// 执行脚本
./k8s.sh

初始化Master

1
kubeadm init --kubernetes-version=v1.13.2 --pod-network-cidr=10.244.0.0/16

配置kubectl认证信息
1
2
3
4
5
6
7
8
# 非root用户
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# root用户
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

安装网络插件flannel
1
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Node

Node镜像本地化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 编辑脚本从hub获取镜像
vim k8s.sh

#!/bin/bash
images=(
kube-proxy:v1.13.2
pause:3.1
)
for imageName in ${images[@]} ; do
docker pull mirrorgooglecontainers/$imageName
docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName
docker rmi mirrorgooglecontainers/$imageName
done

// 编辑脚本权限
chmod +x k8s.sh

// 执行脚本
./k8s.sh

将节点加入集群
1
kubeadm join 172.16.1.86:6443 --token xxx --discovery-token-ca-cert-hash xxx

Dashboard

未完待续…


题外话:

安装过程中可以用tail -f 100 /var/log/messages查看日志,便于找到问题所在

我就想试试,没别的意思!