安装kubernetes

说明

仓库地址 当前操作命令都编辑成脚本在 install.sh 中,如有需要可以直接使用install.sh进行处理, images文件夹下的容器内容太大不能上传,可本地下载后导入, 具体操作请查看 启动k8s 部分, 将导出的容器存放到 images 文件夹下, 执行脚本时所需要用到的文件及文件夹有(images, system, install.sh), 其他文件夹按需上传

安装前操作

因为很多命令需要root权限,需要切换到 root 用户进行操作, sudo su -

关闭swap, 防火墙, 设置iptables, 同步时区

sh 复制代码
swapoff -a
# 检查是否存在已注释的swap条目
# -i.bak.$(date +%s) 直接编辑文件并在操作前基于当前时间戳(秒数)创建一个备份
# /swap/s/^/#/ 查找到所有包含swap的行,并在开头添加 #
grep '^#.*swap' /etc/fstab > /dev/null || sed -i.bak.$(date +%s) '/swap/s/^/#/' /etc/fstab

# 关闭防火墙
systemctl stop ufw && systemctl disable ufw

# 配置iptables
# 显示加载 br_netfilter
modprobe br_netfilter
cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

# 启动ipv6
# net.ipv4.ip_forward ipv4数据包转发
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

# 设置时区为上海并同步时区,因为虚拟机快照还原时时间和现在时间不同步
# 使用apt update 时会有docker安装包查询失败
timedatectl set-timezone Asia/Shanghai
systemctl restart systemd-timedated
systemctl restart systemd-timesyncd
date

更新 安装包

shell 复制代码
apt update
apt install -y apt-transport-https ca-certificates curl gpg gnupg

# 创建公钥存放路径
mkdir -p -m 755 /etc/apt/keyrings

# 如果有安装docker, 需要先将docker进行卸载
apt remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc
# 卸载Docker Engine、CLI、containerd 和 Docker Compose
apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
# 删除所有镜像、容器和卷
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
# 删除源列表和密钥环
rm /etc/apt/sources.list.d/docker.list
rm /etc/apt/keyrings/docker.asc
# 删除docker服务
rm -rf /etc/systemd/system/docker.service
rm -rf /etc/systemd/system/docker.service.d


# 配置 docker 和 k8s 安装源
# 配置docker阿里云镜像源信息
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
#chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

# 配置k8s阿里云镜像源信息
# 添加阿里云源 请查看 https://developer.aliyun.com/mirror/kubernetes/?spm=a2c6h.25603864.0.0.71132529Js0emC 新版配置方法
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list

apt update
echo "安装docker"
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 添加 crictl 配置文件,后续crictl使用docker的容器进行管理
cat <<EOF | tee /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false
EOF

# 安装k8s
apt install -y kubectl kubeadm kubelet
# 锁定版本,避免意外升级
apt-mark hold kubelet kubeadm kubectl

启动k8s

因为docker代理被关闭,下载容器需要很长时间,可以提前下载后上传导入

shell 复制代码
# 查看启动需要的容器
kubeadm config images list

#下载需要用到的docker包 
docker pull registry.aliyuncs.com/google_containers/coredns:v1.11.3 
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.16-0 
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.32.0 
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.32.0 
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.32.0 
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.32.0 
docker pull registry.aliyuncs.com/google_containers/pause:3.10 

# 下载网络插件
docker pull ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1 
docker pull ghcr.io/flannel-io/flannel:v0.26.4

# 导出容器
docker save -o coredns_v1.11.3.tar registry.aliyuncs.com/google_containers/coredns:v1.11.3
docker save -o etcd_3.5.16-0.tar registry.aliyuncs.com/google_containers/etcd:3.5.16-0
docker save -o kube-apiserver_v1.32.0.tar registry.aliyuncs.com/google_containers/kube-apiserver:v1.32.0
docker save -o kube-controller-manager_v1.32.0.tar registry.aliyuncs.com/google_containers/kube-controller-manager:v1.32.0
docker save -o kube-proxy_v1.32.0.tar registry.aliyuncs.com/google_containers/kube-proxy:v1.32.0
docker save -o kube-scheduler_v1.32.0.tar registry.aliyuncs.com/google_containers/kube-scheduler:v1.32.0
docker save -o pause_3.10.tar registry.aliyuncs.com/google_containers/pause:3.10
docker save -o flannel-cni-plugin_v1.6.2-flannel1.tar ghcr.io/flannel-io/flannel-cni-plugin:v1.6.2-flannel1
docker save -o flannel_v0.26.4.tar ghcr.io/flannel-io/flannel:v0.26.4

# 本地上传到服务器
scp -r coredns_v1.11.3.tar master@192.168.83.101:/home/master/k8s-init/images

# 导入到ctr
ctr -n=k8s.io i import /home/master/k8s-init/images/coredns_v1.11.3.tar
ctr -n=k8s.io i import /home/master/k8s-init/images/etcd_3.5.16-0.tar
ctr -n=k8s.io i import /home/master/k8s-init/images/kube-apiserver_v1.32.0.tar
ctr -n=k8s.io i import /home/master/k8s-init/images/kube-controller-manager_v1.32.0.tar
ctr -n=k8s.io i import /home/master/k8s-init/images/kube-proxy_v1.32.0.tar
ctr -n=k8s.io i import /home/master/k8s-init/images/kube-scheduler_v1.32.0.tar
ctr -n=k8s.io i import /home/master/k8s-init/images/pause_3.10.tar
ctr -n=k8s.io i import /home/master/k8s-init/images/flannel-cni-plugin_v1.6.2-flannel1.tar
ctr -n=k8s.io i import /home/master/k8s-init/images/flannel_v0.26.4.tar

使用命令启动时,会提示容器要使用systemd做驱动的错误,命令中没有直接修改驱动的情况,所以此处使用yaml进行创建

yaml 复制代码
apiServer: {}
apiVersion: kubeadm.k8s.io/v1beta4
clusterName: k8s-init
kind: ClusterConfiguration # 集群级别配置
kubernetesVersion: 1.32.0 # 使用的版本
imageRepository: registry.aliyuncs.com/google_containers
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16  # 确保与您选择的CNI插件兼容

---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration #  配置 kubelet
cgroupDriver: systemd  # 设置cgroup driver为systemd
serializeImagePulls: false
evictionHard: # kubelet 在资源不足时驱逐 pod 的硬性阈值
  memory.available: "100Mi"
  nodefs.available: "10%"
  nodefs.inodesFree: "5%"

---
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration # 初始化配置
nodeRegistration:
  criSocket: "unix:///var/run/containerd/containerd.sock"  # 根据使用的容器运行时调整路径
  name: "master" # 将主机名称设置为 master, 如果不设置,会通过hostname进行获取
shell 复制代码
# 启动主节点
kubeadm init --config kubeadm-init.yaml

# kubectl 是使用 ~/.kube/config 来确定如何连接集群的,
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

export KUBECONFIG=/etc/kubernetes/admin.conf

安装网络插件, 从节点接入时通信

yaml 复制代码
# 安装Flannel网络插件, 使用文件为 https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 配置信息
# 使用此配置文件时, 需要修改net-conf.json配置和kubeadm-init.yaml中的 podSubnet 配置相同

# 安装网络插件
kubectl apply -f kube-flannel.yaml
相关推荐
KubeSphere 云原生6 小时前
云原生周刊:在 Kubernetes 上运行机器学习
云原生·容器·kubernetes
企鹅侠客13 小时前
k8s-dashboard-v2.0.0-beta6部署
云原生·容器·kubernetes
奋斗的蛋黄13 小时前
SRE 进阶:AI 驱动的集群全自动化排查指南(零人工干预版)
运维·人工智能·kubernetes·自动化
戮戮15 小时前
一次深入排查:Spring Cloud Gateway TCP 连接复用导致 K8s 负载均衡失效
tcp/ip·spring cloud·kubernetes·gateway·负载均衡·netty
能不能别报错17 小时前
K8s学习笔记(二十四) ingress
笔记·学习·kubernetes
能不能别报错17 小时前
K8s学习笔记(二十三) 网络策略 NetworkPolicy
笔记·学习·kubernetes
suknna18 小时前
记一次 Kubebuilder Operator 开发中的 CRD 注解超限问题
kubernetes
victory043120 小时前
K8S 安装 部署 文档
算法·贪心算法·kubernetes
能不能别报错2 天前
K8s学习笔记(二十二) 网络组件 Flannel与Calico
笔记·学习·kubernetes
lijun_xiao20092 天前
DevOps(devops/k8s/docker/Linux)学习笔记
docker·kubernetes·devops