安装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 [email protected]:/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
相关推荐
神奇侠202410 小时前
快速入手K8s+Docker+KubeSphere+DevOps
docker·kubernetes·devops
CN_HW10 小时前
k8s证书续期
云原生·容器·kubernetes
C-200212 小时前
Dashboard的安装和基本使用
运维·kubernetes
可观测性用观测云15 小时前
Kube-Proxy 可观测性最佳实践
kubernetes
KubeSphere16 小时前
云原生周刊:K8s 中的 GPU 共享
kubernetes
LCY13319 小时前
k8s 部署spring项目+动态启动pod
spring·容器·kubernetes
qq_413691351 天前
CI/CD(十) Jenkins共享库与k8s集成
ci/cd·kubernetes·jenkins
Spring_java_gg1 天前
组件和容器之争?|WebAssembly + Kubernetes:云原生的新组合
云原生·容器·kubernetes·wasm
向哆哆2 天前
Java + Kubernetes:云原生时代的开发与运维
java·云原生·kubernetes