单节点部署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
本文来自博客园,作者:ignibera,转载请注明原文链接:https://www.cnblogs.com/ignibera/p/21917875

浙公网安备 33010602011771号