0 前提说明

2024年,由于某种意外,导致docker镜像等无法继续使用,镜像也不容易获取到,这对于k8s的学习比较难搞,在碰壁多次后,我通过代理来完成了k8s和containerd的安装。

  • 系统:windows10
  • 虚拟机:vmware
  • 虚拟机系统:centos7
  • windows上的某软件:开启Tun模式和服务模式,确保虚拟机的所有流量都走这个代理

1 基础环境

1.1 yum的配置和更新

如果你不喜欢fastestmirror插件,可以通过下面的方式关闭

vi /etc/yum/pluginconf.d/fastestmirror.conf  
#修改内容
enabled = 1//由1改为0,禁用该插件

话回正题,由于官方的mirrorlist.centos.org已经关闭,因此yum只能换用国内阿里云的镜像源(我这里测试清华源有问题,别用!

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
# yum 更新
yum update -y
# tab 命令补全
yum install -y bash-completion
# wget
yum install -y wget
# vim 编辑器
yum install -y vim-enhanced
# 网络工具
yum install -y net-tools
# gcc 编译器
yum install -y gcc

1.2 centos的更改

关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld
systemctl is-enabled firewalld

配置ntp server同步时间

sudo yum -y install ntpdate
sudo ntpdate ntp1.aliyun.com
sudo systemctl status ntpdate
sudo systemctl start ntpdate
sudo systemctl status ntpdate
sudo systemctl enable ntpdate

关闭交换空间

free -h
sudo swapoff -a
sudo sed -i 's/.*swap.*/#&/' /etc/fstab
free -h

永久关闭selinux

getenforce
cat /etc/selinux/config
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat /etc/selinux/config

2 安装containerd和K8S

2.1 配置k8s环境

配置内核参数

cat > /etc/sysctl.d/Kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

# 使配置生效
sysctl --system

这些配置参数的含义是:

  1. net.bridge.bridge-nf-call-ip6tables = 1:当通过桥接网络接收到IPv6数据包时,将调用ip6tables的规则进行处理。
  2. net.bridge.bridge-nf-call-iptables = 1:当通过桥接网络接收到IPv4数据包时,将调用iptables的规则进行处理。
  3. net.ipv4.ip_forward = 1:允许IPv4的数据包转发,即使数据包的目标不是本机。
  4. vm.swappiness = 0: vm.swappiness是操作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vm.swappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。

Kubernetes通过iptables实现服务发现和网络流量路由,pod通信。这一步很重要。没有设置的话会导致集群网络通信故障,如pod无法通信

yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
# 相关内核模块
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
# 启动服务
systemctl enable --now systemd-modules-load
  • ip_vsip_vs_rrip_vs_wrrip_vs_sh 是IPVS相关的内核模块。它们提供了不同的负载均衡算法(round-robin,加权轮询,最短任务优先)。
  • nf_conntracknf_conntrack_ipv4 是用于网络连接跟踪的内核模块,这在防火墙和NAT中非常重要。
  • linux kernel 4.19版本已经将nf_conntrack_ipv4 更新为 nf_conntrack

安装containerd

从这里开始,使用代理安装:

yum -y install yum-utils device-mapper-persistent-data lvm2
# 添加阿里源:不要用!!!
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 添加docker源(需要开代理)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 配置 containerd
cat >>/etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
# 立刻加载 overlay模块
modprobe overlay
# 立刻加载 br_netfilter模块
modprobe br_netfilter
# 安装containerd
yum install containerd.io -y

配置:

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 使用systemd管理cgroups
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml
# 配置sadnbox image从阿里云拉取:弃用!!
#sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
#sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#' /etc/containerd/config.toml
# 启动containerd
systemctl enable containerd
systemctl start containerd

2.2 安装 k8s

添加k8s仓库源

参考来源:
更改 Kubernetes 软件包仓库 | Kubernetes
pkgs.k8s.io:介绍 Kubernetes 社区自有的包仓库 | Kubernetes

# Kubernetes 社区自有的包仓库
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
# 查看上述的内容
cat /etc/yum.repos.d/kubernetes.repo

安装k8s并启动

# 查看可用版本
yum list kubelet --showduplicates |grep 1.28

# 开始安装   这篇文档写下时,最新版本为1.28.2  我直接安装的最新版
yum -y install kubectl-1.28.2 kubelet-1.28.2 kubeadm-1.28.2

# 启动
systemctl enable kubelet
systemctl start kubelet

此时,将master虚拟机克隆出其他的worker,记得更改主机名

之前是用一台虚拟机进行操作,由于k8s至少有一主二从,所以这里可以进行虚拟机的克隆了

修改主机名

# 查看主机名
hostnamectl
# 修改主机名
hostnamectl set-hostname xxxx

更改静态IP:CentOS配置静态IP_centos配置静态ip地址-CSDN博客,别忘了更改DNS!!

# 例如下面这个形式,按照链接里的配置,记得改成你的IP
IPADDR="192.168.188.132"
NETMASK="255.255.255.0"
GATEWAY="192.168.188.2"

DNS1="8.8.8.8"

修改hosts(记得改成你的IP)

cat >>/etc/hosts <<EOF
192.168.188.132 master
192.168.188.134 worker1 
192.168.188.135 worker2
EOF

2.3 部署master节点

这里开始的操作,仅针对master节点

使用kubeadm初始化

# 查看所需镜像
kubeadm config images list --kubernetes-version=v1.28.2

# 初始化(记得更改里面的IP)
kubeadm init --kubernetes-version=1.28.2 \
--apiserver-advertise-address=192.168.31.200  \
--pod-network-cidr=172.16.0.0/16
  • apiserver-advertise-address写control-plane(master节点)的ip
  • pod-network-cidr写个不冲突的网段即可

配置认证

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

检测一下:

kubectl get node
kubectl get pods -A
kubectl get pods -n kube-system

获取加入集群的命令:

kubeadm token create --print-join-command

部署calico

# 安装calico网络插件
wget https://docs.projectcalico.org/manifests/calico.yaml

下载后,按照图片里的样式,将CALICO_IPV4POOL_CIDR修改为10.244.0.0/16
在这里插入图片描述
以及在该文件里指定网卡

# Cluster type to identify the deployment type
  - name: CLUSTER_TYPE
    value: "k8s,bgp"
# 下面添加
  - name: IP_AUTODETECTION_METHOD
    value: "interface=ens*"
    # 匹配所有网卡名称

修改完yaml文件后,开始部署

kubectl apply -f calico.yaml
# 检查
kubectl get pods -n kube-system

2.4 配置worker节点

该部分只操作worker节点

worker节点加入集群

在master节点执行如下命令,得到worker节点加入的命令

kubeadm token create --print-join-command

在worker节点,根据获取到命令,执行类似于这样的命令kubeadm join 192.168.31.200:6443 --token l906wz.0fydt3hcfbogwlo9 \ --discovery-token-ca-cert-hash sha256:2604d3aab372a483b26bcbdafdb54d7746226975c3a317db07d94eccdfca51be

查看状态:

kubectl get nodes

配置worker节点的秘钥

参考自:kubectl命令报错couldn't get current server API group list: Get "http://localhost:8080 - 中仕 - 博客园 (cnblogs.com)

我之前参考的教程漏了内容,会导致couldn't get current server API group list: Get "http://localhost:8080的错误

需要在每个worker节点上,执行如下命令

mkdir ~/.kube
cp /etc/kubernetes/kubelet.conf  ~/.kube/config

3 测试

安装完毕,那就部署个nginx试一下吧
参考自:使用 Deployment 运行一个无状态应用 | Kubernetes
新建一个deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # 告知 Deployment 运行 2 个与该模板匹配的 Pod
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.27.0
        ports:
        - containerPort: 80

进行部署一下:

kubectl apply -f deployment.yaml

不出意外的话,在某方法的帮助下,你的下载部署不会有问题的

参考自

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐