CentOS8部署k8s集群(kubeadm方式)
1.VirtualBox安装Centos8
略
2.准备工作
-
查看网卡信息得到网卡名称
nmcli c
-
设置为自启动网卡(ONBOOT=yes)
nmcli connection modify enp0s3 connection.autoconnect yes
-
手动设置ip地址
nmcli connection modify enp0s3 ipv4.method manual ipv4.addresses 192.168.56.101/24
-
设置网关(virtualbox的全局网卡ip)
nmcli connection modify enp0s3 ipv4.gateway 192.168.56.1
-
添加DNS
nmcli connection modify enp0s3 ipv4.dns 192.168.56.1
-
重启网卡(不生效,需要重启虚拟机才生效)
nmcli c reload
-
查看ip是否配置成功
ip a
-
重启服务器
shutdown -r now
-
关闭 swap
删除 swap 区所有内容swapoff -a
删除 swap 挂载,系统下次启动不会挂载 swapsed -i 's/.*swap.*/#&/' /etc/fstab
-
关闭selinux
setenforce 0
sed -i 's/^SELINUX=Enforcing$/SELINUX=Permissive/' /etc/selinux/config
查看selinux状态getenforce
-
清空iptables规则链和关闭防火墙
iptables -F
iptables -X
systemctl stop firewalld
systemctl disable firewalld
查看防火墙状态systemctl status firewalld
-
将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
-
使系统配置生效
sysctl --system -
卸载Centos8自带的podman
yum remove podman
3.安装Docker(版本:19.03)
-
安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
-
添加软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新yum源后清除缓存再重新生成索引缓存加快安装速度
yum clean all
yum makecache
-
列出docker版本
yum list docker-ce.x86_64 --showduplicates | sort -r
-
安装指定版本的docker-ce docker-ce-cli containerd.io(19.03.14-3.el8)
yum install -y docker-ce-19.03.14-3.el8 docker-ce-cli-19.03.14-3.el8 containerd.io-1.4.3-3.1.el8
-
启动Docker
systemctl start docker
-
设置开机启动
systemctl enable docker
-
查看docker状态
systemctl status docker
-
镜像加速 在配置文件/etc/docker/daemon.json 中加入(没有则创建)
{ "registry-mirrors": ["https://d8b3zdiw.mirror.aliyuncs.com","https://hub-mirror.c.163.com"] }
-
修改Docker的Cgroup Driver与kubelet的Cgroup Driver保持一致
vim /usr/lib/systemd/system/docker.service
添加参数 --exec-opt native.cgroupdriver=systemdExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
重载服务配置文件systemctl daemon-reload
重启Docker服务systemctl restart docker
查看Cgroup Driver为systemddocker info | grep Cgroup
-
版本装错了解决方案
yum remove -y docker-ce docker-ce-cli containerd.io
yum install -y docker-ce-19.03.14-3.el8 docker-ce-cli-19.03.14-3.el8 containerd.io-1.4.3-3.1.el8
4.安装k8s(版本1.19.2)
-
添加阿里云YUM软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
-
更新yum源后清除缓存再重新生成索引缓存加快安装速度
yum clean all
yum makecache
-
安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.19.2 kubeadm-1.19.2 kubectl-1.19.2 --disableexcludes=kubernetes
--disableexcludes=kubernetes 禁掉除了这个之外的别的仓库 -
激活kubelet并启动
systemctl enable --now kubelet
--now设置为开机自动激活单元并现在立刻启动 -
加载br_netfilter模块
modprobe br_netfilter
查看模块列表lsmod | grep br_netfilter
5.启动k8s主节点
-
设置主机名并生效
sudo nmcli g hostname k8s-master
systemctl restart systemd-hostnamed
-
配置hosts
vim /etc/hosts
192.168.1.74 k8s-master
192.168.1.75 k8s-node1
-
重置kubeadm(第一次安装不需要)
kubeadm reset
rm -rf /etc/kubernetes/pki
rm -rf /etc/cni/net.d
rm -rf $HOME/.kube
删除k8s网卡(会自动重建),以防cni0的IP地址段与flannel subnet地址段不同ifconfig flannel.1 down
ip link delete flannel.1
ifconfig cni0 down
ip link delete cni0
iptables -F && iptables -t nat -F
iptables -X
-
初始化kubeadm
kubeadm init --kubernetes-version=v1.19.2 --apiserver-advertise-address 192.168.1.74 --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
--apiserver-advertise-address:Master节点的ip地址
--pod-network-cidr:指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR
--image-repository:这个用于指定从什么位置来拉取镜像(1.13版本才有的),默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers -
记录token
kubeadm join 192.168.1.74:6443 --token ei6o4e.1heimz9zqsa2cab8 \ --discovery-token-ca-cert-hash sha256:fb39bae49d4d88ae4d377349c4e61eae9bd3ad810438f33dfff44e251bb9c9e9 -
创建kubectl
rm -rf $HOME/.kube
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
去掉scheduler、controller-manager端口限制
vim /etc/kubernetes/manifests/kube-scheduler.yaml
删除--port=0(注意是删除,在行首加#会出错的)vim /etc/kubernetes/manifests/kube-controller-manager.yaml
删除--port=0
重启kubeletsystemctl restart kubelet
查看kube-scheduler和kube-controller-manager组件是否正常kubectl get cs
-
修改apiserver对外映射端口范围(默认为30000-50000)
vim /etc/kubernetes/manifests/kube-apiserver.yaml
添加下面的配置- --service-node-port-range=1-65535
重启kubeletsystemctl restart kubelet
-
安装网络插件 flannel
1.下载fannel.yml文件cd /root
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
域名raw.githubusercontent.com无法解析就用站长工具查询对应ip修改hosts文件
2.解决flannel因网卡名启动失败问题
找到name: kube-flannel节点,在args节点下添加(可添加多个)- --iface=enp0s3
3.解决Failed to ensure iptables rules: Error checking rule existence: failed to check rule existence: running
调高limits
resources: requests: cpu: "100m" memory: "50Mi" limits: cpu: "500m" memory: "500Mi"
4.安装flannelkubectl delete -f /root/kube-flannel.yml
kubectl apply -f /root/kube-flannel.yml
6.启动k8s子节点
-
加入主节点
kubeadm join 192.168.1.74:6443 --token ei6o4e.1heimz9zqsa2cab8 \ --discovery-token-ca-cert-hash sha256:fb39bae49d4d88ae4d377349c4e61eae9bd3ad810438f33dfff44e251bb9c9e9
如果token超过一天过期,执行kubeadm token create --print-join-command
生成一个永不过期的tokenkubeadm token create --ttl 0
-
在Master节点使用kubectl工具查看节点状态
kubectl get nodes
kubectl cluster-info
kubectl get cs