Press "Enter" to skip to content

利用Kubeadm创建Kubernetes集群

前记

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

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

部署

资源版本

CentOS 7.6 64
Kubernetes version: v1.13.2
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 Address Hostname CPU Memory
172.16.1.86 Master 2C 4G
172.16.1.87 Node1 2C 4G
172.16.1.88 Node2 2C 4G

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

配置

关闭防火墙

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

设定/etc/hosts

172.16.1.86 Master
172.16.1.87 Node1
172.16.1.88 Node2

禁用Swap

swapoff -a && sysctl -w vm.swappiness=0

将配置中net.bridge.bridge-nf-call-iptables被设为1

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参考https://www.tracymc.cn/archives/1327

安装完成启动Docker

systemctl enable docker.service

安装K8s

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

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

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

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

版本:Kubernetes version: v1.13.2

Master

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

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

需要重启kubelet:

systemctl daemon-reload
systemctl restart kubelet

k8s.gcr.io镜像本地化

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

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

配置kubectl认证信息

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

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Node

Node镜像本地化

// 编辑脚本从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

将节点加入集群

kubeadm join 172.16.1.86:6443 --token xxx --discovery-token-ca-cert-hash xxx

题外话:

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

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注