弃用docker后如何安装k8s

184 阅读1分钟

在生产环境时,需要保证内核版本高于5,可以选择升级内核或使用龙蜥 Anolis OS

准备工作

前置配置

  1. 转发 IPv4 并让 iptables 看到桥接流量

    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    overlay
    br_netfilter
    EOF
    
    sudo modprobe overlay
    sudo modprobe br_netfilter
    
    # 设置所需的 sysctl 参数,参数在重新启动后保持不变
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-iptables  = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward                 = 1
    EOF
    
    # 应用 sysctl 参数而不重新启动
    sudo sysctl --system
    
    #通过运行以下指令确认 br_netfilter 和 overlay 模块被加载:
    
    lsmod | grep br_netfilter
    lsmod | grep overlay
    
    #通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1:
    
    sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
    
    modprobe br_netfilter
    #生效
    sudo sysctl --system
    
    #开启ipvs
    yum -y install ipvsadm  ipset
    
    # 临时生效
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    
    # 永久生效
    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4  
    EOF
    
  2. 关闭防火墙等默认配置

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#关闭NetworkManager
systemctl stop NetworkManager 
systemctl disable NetworkManager

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo setenforce 0
#关闭swap 使用free -m 查看
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab
  1. 配置主机名和host文件映射
# 预备环境
#对于云服务器来说,要注意组内互信 
#各个机器设置自己的域名
hostnamectl set-hostname xxxx
echo "127.0.0.1 $(hostname)" >> /etc/hosts

安装组件

  1. 安装 kubelet、kubeadm、kubectl

阿里云镜像地址

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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
setenforce 0

#卸载旧版本
yum remove -y kubelet kubeadm kubectl

#查看可以安装的版本
yum list kubelet --showduplicates | sort -r
# 安装最新版
yum install -y kubelet kubeadm kubectl
# 安装指定版本
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9

#开机启动
systemctl enable kubelet && systemctl start kubelet
  1. 安装容器运行时(containerd)
  • 安装参考

Install Docker Engine on CentOS | Docker Documentation

💡 如果已经安装了docker环境,则已经有了containerd运行时
  • 添加和修改配置文件

参考

# 将默认配置文件导入
containerd config default > /etc/containerd/config.toml

来源:配置containerd_小吉猫w的技术博客_51CTO博客

  1. **配置 systemd cgroup 驱动

    搜索SystemdCgroup

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true

如果低于1.22版本,也要注意kubelet的驱动

  1. 重载沙箱(pause)镜像

    搜索sandbox_image

[plugins."io.containerd.grpc.v1.cri"]
  sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"
sudo systemctl restart containerd
  1. 配置国内镜像源

containerd配置国内镜像源及使用私有镜像仓库_containerd 镜像源_o!xiaoxuan的博客-CSDN博客

  1. 下载镜像
kubeadm config images list --kubernetes-version ${k8s-version}

kubeadm config images pull --image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers" --kubernetes-version=${k8s-version}

启动控制平面

#所有机器添加master域名映射,以下需要修改为自己的
   echo "${hostip}  cluster-endpoint" >> /etc/hosts

# 注意3个网段均不能重叠,详见https://blog.csdn.net/mayi_xiaochaun/article/details/121402679
   kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
   	--apiserver-advertise-address=${hostip} \
   	--control-plane-endpoint=cluster-endpoint \
   	--kubernetes-version ${k8s-version} \
   --service-cidr=172.168.0.0/16 \
   --pod-network-cidr=10.0.0.0/16

k8s coredns显示0/1 Running问题排查_coredns ready 0/1_mayi_xiaochuan的博客-CSDN博客

worker节点加入

配置网络插件

calico.yaml

kubectl create -f calico.yaml

设置ipvs

#修改kube-proxy配置
$ kubectl edit cm kube-proxy -n kube-system

# 修改如下
ipvs:
      excludeCIDRs: null
      minSyncPeriod: 0s
      scheduler: ""
      strictARP: false
      syncPeriod: 30s
      tcpFinTimeout: 0s
      tcpTimeout: 0s
      udpTimeout: 0s
    kind: KubeProxyConfiguration
    metricsBindAddress: ""
    mode: "ipvs"

重启所有的 kube-proxy pod

$ kubectl delete pod kube-proxy-sf99g -n kube-system