centos7安装k8s 1.28版本,基于科学
2024年,由于某种意外,导致docker镜像等无法继续使用,镜像也不容易获取到,这对于k8s的学习比较难搞,在碰壁多次后,我通过代理来完成了k8s和containerd的安装。
0 前提说明
2024年,由于某种意外,导致docker镜像等无法继续使用,镜像也不容易获取到,这对于k8s的学习比较难搞,在碰壁多次后,我通过代理来完成了k8s和containerd的安装。
- 系统:windows10
- 虚拟机:vmware
- 虚拟机系统:centos7
- windows上的某软件:开启Tun模式和服务模式,确保虚拟机的所有流量都走这个代理
1 基础环境
1.1 yum的配置和更新
如果你不喜欢fastestmirror插件,可以通过下面的方式关闭
vi /etc/yum/pluginconf.d/fastestmirror.conf
#修改内容
enabled = 1//由1改为0,禁用该插件
话回正题,由于官方的mirrorlist.centos.org
已经关闭,因此yum只能换用国内阿里云的镜像源(我这里测试清华源有问题,别用!)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
# yum 更新
yum update -y
# tab 命令补全
yum install -y bash-completion
# wget
yum install -y wget
# vim 编辑器
yum install -y vim-enhanced
# 网络工具
yum install -y net-tools
# gcc 编译器
yum install -y gcc
1.2 centos的更改
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
systemctl is-enabled firewalld
配置ntp server同步时间
sudo yum -y install ntpdate
sudo ntpdate ntp1.aliyun.com
sudo systemctl status ntpdate
sudo systemctl start ntpdate
sudo systemctl status ntpdate
sudo systemctl enable ntpdate
关闭交换空间
free -h
sudo swapoff -a
sudo sed -i 's/.*swap.*/#&/' /etc/fstab
free -h
永久关闭selinux
getenforce
cat /etc/selinux/config
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat /etc/selinux/config
2 安装containerd和K8S
2.1 配置k8s环境
配置内核参数
cat > /etc/sysctl.d/Kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
# 使配置生效
sysctl --system
这些配置参数的含义是:
net.bridge.bridge-nf-call-ip6tables = 1
:当通过桥接网络接收到IPv6数据包时,将调用ip6tables
的规则进行处理。net.bridge.bridge-nf-call-iptables = 1
:当通过桥接网络接收到IPv4数据包时,将调用iptables
的规则进行处理。net.ipv4.ip_forward = 1
:允许IPv4的数据包转发,即使数据包的目标不是本机。vm.swappiness = 0
: vm.swappiness是操作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vm.swappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。
Kubernetes通过iptables实现服务发现和网络流量路由,pod通信。这一步很重要。没有设置的话会导致集群网络通信故障,如pod无法通信
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
# 相关内核模块
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
# 启动服务
systemctl enable --now systemd-modules-load
ip_vs
,ip_vs_rr
,ip_vs_wrr
,ip_vs_sh
是IPVS相关的内核模块。它们提供了不同的负载均衡算法(round-robin,加权轮询,最短任务优先)。nf_conntrack
和nf_conntrack_ipv4
是用于网络连接跟踪的内核模块,这在防火墙和NAT中非常重要。- linux kernel 4.19版本已经将nf_conntrack_ipv4 更新为 nf_conntrack
安装containerd
从这里开始,使用代理安装:
yum -y install yum-utils device-mapper-persistent-data lvm2
# 添加阿里源:不要用!!!
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 添加docker源(需要开代理)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 配置 containerd
cat >>/etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
# 立刻加载 overlay模块
modprobe overlay
# 立刻加载 br_netfilter模块
modprobe br_netfilter
# 安装containerd
yum install containerd.io -y
配置:
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 使用systemd管理cgroups
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml
# 配置sadnbox image从阿里云拉取:弃用!!
#sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
#sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#' /etc/containerd/config.toml
# 启动containerd
systemctl enable containerd
systemctl start containerd
2.2 安装 k8s
添加k8s仓库源
参考来源:
更改 Kubernetes 软件包仓库 | Kubernetes
pkgs.k8s.io:介绍 Kubernetes 社区自有的包仓库 | Kubernetes
# Kubernetes 社区自有的包仓库
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
# 查看上述的内容
cat /etc/yum.repos.d/kubernetes.repo
安装k8s并启动
# 查看可用版本
yum list kubelet --showduplicates |grep 1.28
# 开始安装 这篇文档写下时,最新版本为1.28.2 我直接安装的最新版
yum -y install kubectl-1.28.2 kubelet-1.28.2 kubeadm-1.28.2
# 启动
systemctl enable kubelet
systemctl start kubelet
此时,将master虚拟机克隆出其他的worker,记得更改主机名
之前是用一台虚拟机进行操作,由于k8s至少有一主二从,所以这里可以进行虚拟机的克隆了
修改主机名
# 查看主机名
hostnamectl
# 修改主机名
hostnamectl set-hostname xxxx
更改静态IP:CentOS配置静态IP_centos配置静态ip地址-CSDN博客,别忘了更改DNS!!
# 例如下面这个形式,按照链接里的配置,记得改成你的IP
IPADDR="192.168.188.132"
NETMASK="255.255.255.0"
GATEWAY="192.168.188.2"
DNS1="8.8.8.8"
修改hosts(记得改成你的IP)
cat >>/etc/hosts <<EOF
192.168.188.132 master
192.168.188.134 worker1
192.168.188.135 worker2
EOF
2.3 部署master节点
这里开始的操作,仅针对master节点
使用kubeadm初始化
# 查看所需镜像
kubeadm config images list --kubernetes-version=v1.28.2
# 初始化(记得更改里面的IP)
kubeadm init --kubernetes-version=1.28.2 \
--apiserver-advertise-address=192.168.31.200 \
--pod-network-cidr=172.16.0.0/16
apiserver-advertise-address
写control-plane(master节点)的ippod-network-cidr
写个不冲突的网段即可
配置认证
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
检测一下:
kubectl get node
kubectl get pods -A
kubectl get pods -n kube-system
获取加入集群的命令:
kubeadm token create --print-join-command
部署calico
# 安装calico网络插件
wget https://docs.projectcalico.org/manifests/calico.yaml
下载后,按照图片里的样式,将CALICO_IPV4POOL_CIDR
修改为10.244.0.0/16
以及在该文件里指定网卡
# Cluster type to identify the deployment type
- name: CLUSTER_TYPE
value: "k8s,bgp"
# 下面添加
- name: IP_AUTODETECTION_METHOD
value: "interface=ens*"
# 匹配所有网卡名称
修改完yaml文件后,开始部署
kubectl apply -f calico.yaml
# 检查
kubectl get pods -n kube-system
2.4 配置worker节点
该部分只操作worker节点
worker节点加入集群
在master节点执行如下命令,得到worker节点加入的命令
kubeadm token create --print-join-command
在worker节点,根据获取到命令,执行类似于这样的命令kubeadm join 192.168.31.200:6443 --token l906wz.0fydt3hcfbogwlo9 \ --discovery-token-ca-cert-hash sha256:2604d3aab372a483b26bcbdafdb54d7746226975c3a317db07d94eccdfca51be
查看状态:
kubectl get nodes
配置worker节点的秘钥
我之前参考的教程漏了内容,会导致couldn't get current server API group list: Get "http://localhost:8080
的错误
需要在每个worker节点上,执行如下命令
mkdir ~/.kube
cp /etc/kubernetes/kubelet.conf ~/.kube/config
3 测试
安装完毕,那就部署个nginx试一下吧
参考自:使用 Deployment 运行一个无状态应用 | Kubernetes
新建一个deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # 告知 Deployment 运行 2 个与该模板匹配的 Pod
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27.0
ports:
- containerPort: 80
进行部署一下:
kubectl apply -f deployment.yaml
不出意外的话,在某方法的帮助下,你的下载部署不会有问题的
参考自
- Centos7安装部署k8s(kubernetes)最新v1.27.1版本超详细安装教程_centos7部署安装kubernetes 最新-CSDN博客
- Kubernetes 部署集群1.28.2版本(无坑) - smx886 - 博客园 (cnblogs.com)
- 解决更新yum源的[Errno 14] HTTP Error 404 - Not Found-CSDN博客
- CentOS 7 配置国内镜像源_centos7安设置国内镜像-CSDN博客
- centos | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
- VMware linux虚拟机如何固定IP(亲测) - i金少 - 博客园 (cnblogs.com)
更多推荐
所有评论(0)