使用kubeadm安装集群

一、kubeadm简介

kubeadm是一个部署k8s的工具。使用kubeadm可以部署一个用于生产环境的k8s集群。

二、配置集群的前置工作

1.前置内容

  • 需要基于Debian和Red Hat的linux发行版的通用指令,及包管理发行版。
  • 每台机器最少2G内存
  • 每台机器最少2个cpu
  • 集群中的所有机器之间网络联通
  • 每台主机主机名、mac地址、product_uuid具有唯一性。
  • 启用iptables
  • 加载br_netfilter模块
  • 禁用swap
  • 安装kubeadm、kubelet、kubectl

2.安装流程

2.1 配置时间

2.1.1 配置时区

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 或者
sudo timedatectl set-timezone Asia/Shanghai

# 配置24小时
echo "LC_TIME=en_DK.UTF-8" >>/etc/default/locale

2.2 检查主机名、mac地址、product_uuid是否唯一

# 检查mac地址
ip link;

# 检查主机名
hostname;cat /etc/hostname

# 检查product_uuid
sudo cat /sys/class/dmi/id/product_uuid

2.3 加载br_netfileter模块

sudo modprobe br_netfilter

2.4 配置iptables查看桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

2.5 安装容器运行时(docker)

使用阿里云镜像站安装

# step 1: 安装必要的一些系统工具
  sudo apt-get update
  sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common


# step 2: 安装GPG证书
  curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -


# Step 3: 写入软件源信息
  sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"


# Step 4: 更新并安装Docker-CE
  sudo apt-get -y update
  sudo apt-get -y install docker-ce

# Step 5:配置docker驱动
  echo '''{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
      "max-size": "100m"
    },
    "storage-driver": "overlay2"
  }''' > /etc/docker/daemon.json
  
  # Step 6:重启docker       

  sudo systemctl enable docker
  sudo systemctl daemon-reload
  sudo systemctl restart docker

2.6 关闭swap

swapoff -a
sed -i 's/\/swap\.img/#\/swap\.img/g' /etc/fstab

2.7 安装kubeadm、kubelet、kubectl

这里使用阿里云的镜像站安装

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl

3.一键配置脚本

仅支持ubuntu,容器运行时为docker,安装的版本均为最新版。如果部署生产环境,建议docker、kubeadm、kubelet、kubectl指定版本。

git clone https://gitee.com/iweimingliang/k8s-node-init.git

cd k8s-node-init;
bash ip master;
bash ip work;

四、kubeadm安装k8s集群

1.使用kubeadm初始化集群

# 指定pod网络(pod的网络,需要与网络插件相同)
kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr 10.244.0.0/16

2.安装网络插件

下载flannel.yml文件

文件地址:https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f kube-flannel.yml

3.添加节点

在节点的主机执行

kubeadm join 192.168.1.162:6443 --token ecgjoh.7kmugnnifqq1yn9m --discovery-token-ca-cert-hash sha256:76a24cb84b27972ac4eda62fcb906b41e205fe79c65bca7e9c422637c6e20f94

4.重新生成token

kubeadm安装完集群,默认生成token24小时有会过期。过期以后,需要重新生成token。

4.1 查看token

kubeadm token list

4.2 生成token

kubeadm token create

4.3 获取–discovery-token-ca-cert-hash 的值

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

五、遇到问题

安装flannel网络插件时,容器一直无法启动。状态为CrashLoopBackOff,查看日志:

I1031 07:04:28.504389       1 vxlan.go:120] VXLAN config: VNI=1 Port=0 GBP=false DirectRouting=false
E1031 07:04:28.504967       1 main.go:280] Error registering network: failed to acquire lease: node "ubuntu-slave1" pod cidr not assigned
I1031 07:04:28.505115       1 main.go:333] Stopping shutdownHandler...

这是因为在用kubeadm初始化k8s集群时,没有添加集群网络。

flannel默认的集群网络段是:10.244.0.0/16,kubeadm默认的网络段不是。

解决方法是:使用kubeadm做初始化时,加上–pod-network-cidr 参数,网络段设置和flannel一样即可。如果使用其它网络插件,则和其它网络插件的网络保持一致即可。

六、参考文档

使用kubeadm引导集群

kubeadm init命令

高可用文档中的坑

用Kubeadm安装K8s后,kube-flannel-ds一直CrashLoopBackOff

七、视频

Previous Post

k8s架构

Next Post

《编码》- 隐匿在计算机软硬件背后的语言

Related Posts