一、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安装K8s后,kube-flannel-ds一直CrashLoopBackOff