单节点部署k8s

简介(该文档使用阿里源部署)

Kubernetes是一个开源系统,用于容器化应用的自动部署、扩缩和管理。它将构成应用的容器按逻辑单位进行分组以便于管理和发现。

由于 Kubernetes 官方变更了仓库的存储路径以及使用方式,如果需要使用 1.28 及以上版本,请使用 新版配置方法 进行配置。

下载地址:https://mirrors.aliyun.com/kubernetes/

新版下载地址:https://mirrors.aliyun.com/kubernetes-new/

该方案使用cri-docker作为容器运行时
CNI网络插件使用flannel

关闭swap

swapoff -a

永久关闭swap

vim /etc/fstab
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

关闭SELinux

# 查看状态
# /usr/sbin/sestatus -v  
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

加载 br_netfilter 模块

# 加载模块
cat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- br_netfilter
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules

# 配置内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

# 生效配置
sysctl --system

安装docker

直接用阿里云的镜像安装即可,一键式部署

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils

# Step 2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Step 4: 开启Docker服务
sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

验证部署

docker --version

docker换源

docker
可以直接使用渡渡鸟镜像站的镜像

安装cri-dockerd

使用docker的好处就是可以直接使用docker管理k8s节点中的镜像,我们也更习惯使用docker

到github上下载对应的包https://github.com/Mirantis/cri-dockerd/releases

将其解压修改执行权限放到/usr/bin

tar xvf cri-dockerd-0.3.16.amd64.tgz
install -o root -g root -m 0755 ./cri-dockerd/cri-dockerd /usr/bin/cri-dockerd

创建文件/etc/systemd/system/cri-docker.service

cat >> /etc/systemd/system/cri-docker.service << EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.10
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

创建文件/etc/systemd/system/cri-docker.socket

cat >> /etc/systemd/system/cri-docker.socket << EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

以上两个配置文件来源于官网文档:https://github.com/Mirantis/cri-dockerd/tree/master/packaging/systemd

重新加载系统服务的管理器配置,并启动cri-docker

systemctl daemon-reload
systemctl enable --now cri-docker.socket

生产环境集群配置(k8s安装)

ps:在生产环境配置时,可以自行选择,在仓库定义中增加exclude参数以确保 Kubernetes 相关的软件包在运行yum update时不会升级,防止因为误升级 kubernetes 导致未知问题。
之前没有固定的话,之后执行也是可以固定版本的

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet

导出默认配置文件

kubeadm config print init-defaults > kubeadm_init.yaml

修改默认配置文件使用国内镜像

advertiseAddress地址为机器的局域网地址

podSubnet地址要与后面网络插件配置相同的地址

criSocket指明要使用的容器运行时这里使用的是docker的,后面会配置。

配置文件中的

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.163.90   # 改为主节点的IP地址
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/cri-dockerd.sock  # 改为cri-docker
  imagePullPolicy: IfNotPresent
  name: master  # 删除此行或使用正确的主机名
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers  # 改为阿里云镜像
kind: ClusterConfiguration
kubernetesVersion: 1.31.6  # 改为最新的小版本
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16  # 增加Pod使用的地址段
scheduler: {}

拉取镜像

这里的拉取镜像不是走的docker,前面有配置k8s的源(不是docker的源)
使用配置文件拉取镜像

# 拉取镜像
kubeadm config images pull --config ./kubeadm_init.yaml

初始化kubeadm

kubeadm init --config ./kubeadm_init.yaml1
Then you can join any number of worker nodes by running the following on each as root:
# 直接复制下面这段即可(生成的token没有指定cri-socket,默认是container,修改为/var/run/cri-dockerd.sock)
kubeadm join 192.168.11.132:6443 --cri-socket /var/run/cri-dockerd.sock --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:2e4587d19c3a7ed3911a814467946534dff5c642ae426fb472806ae6b8d33018 

复制config配置到指定目录

复制config到用户目录,让当前用户可以调用kubernetes的kubectl等

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

部署Pod网路

这个yml实际上是部署一个DaemonSet(声明式部署了一系列资源)
如果失败了,可以单独去下载这个文件

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

取消master污点(让master可以调度Pod)

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

查看容器运行时

crictl info | grep -i runtime

ps

docker换源

posted @ 2026-07-25 18:00  ignibera  阅读(12)  评论(0)    收藏  举报