安装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
相关推荐
Johny_Zhao4 小时前
Docker + CentOS 部署 Zookeeper 集群 + Kubernetes Operator 自动化运维方案
linux·网络安全·docker·信息安全·zookeeper·kubernetes·云计算·系统运维
木鱼时刻2 天前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes
chuanauc2 天前
Kubernets K8s 学习
java·学习·kubernetes
庸子2 天前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins
李白你好2 天前
高级运维!Kubernetes(K8S)常用命令的整理集合
运维·容器·kubernetes
Connie14513 天前
k8s多集群管理中的联邦和舰队如何理解?
云原生·容器·kubernetes
伤不起bb3 天前
Kubernetes 服务发布基础
云原生·容器·kubernetes
别骂我h3 天前
Kubernetes服务发布基础
云原生·容器·kubernetes
weixin_399380693 天前
k8s一键部署tongweb企业版7049m6(by why+lqw)
java·linux·运维·服务器·云原生·容器·kubernetes
斯普信专业组4 天前
K8s环境下基于Nginx WebDAV与TLS/SSL的文件上传下载部署指南
nginx·kubernetes·ssl