环境搭建

本次环境搭建需要安装三台Centos服务器(一主二从),k8s采用1.24.3版本。
环境初始化
1)检查操作系统的版本

cat /etc/redhat-release

2) 主机名解析

# 主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容 
192.168.121.153 master 
192.168.121.152 node1 
192.168.121.151 node2

3) 时间同步

# 安装chrony
 yum install chrony
 vim /etc/chrony.conf
 server ntp1.aliyun.com iburst    ##修改
 
 # 启动chronyd服务 
 systemctl start chronyd

# 设置chronyd服务开机自启 
systemctl enable chronyd

4) 禁用iptables和firewalld服务

# 1 关闭firewalld服务
systemctl stop firewalld 
systemctl disable firewall
# 2 关闭iptables服务
systemctl stop iptables
systemctl disable iptables

5) 禁用selinux

vim /etc/selinux/conf
SELINUX=disabled

6) 禁用swap分区

vim /etc/fstab
注释最后一行

在这里插入图片描述
7)升级操作系统内核

# 导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
 安装elrepo YUM源仓库
  yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
  # 安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本
  yum --enablerepo="elrepo-kernel" -y install kernel-ml.x86_64
  # 设置grub2默认引导为0
  grub2-set-default 0
  重新生成grub2引导文件
  grub2-mkconfig -o /boot/grub2/grub.cfg
  # 更新后,需要重启,使用升级的内核生效
   reboot

8)修改linux的内核参数

#编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置: 

vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1 
vm.swappiness=0
# # 重新加载配置
sysctl -p /etc/sysctl.d/kubernetes.conf
# 加载网桥过滤模块
modprobe br_netfilter
# 查看网桥过滤模块是否加载成功 
lsmod | grep br_netfilter

9)配置ipvs功能
在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的
两者比较的话,ipvs的性能明显要高一些

	# 1 安装ipset和ipvsadm  
yum install ipset ipvsadm -y
# 2 添加需要加载的模块写入脚本文件 
cat <<EOF > /etc/sysconfig/modules/ipvs.modules 
#!/bin/bash modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack 
EOF
# 3 为脚本文件添加执行权限 
chmod +x /etc/sysconfig/modules/ipvs.modules	
# 4 执行脚本文件
 /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5 查看对应的模块是否加载成功 
 lsmod | grep -e ip_vs -e nf_conntrack_ipv4
基础环境

kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源,本文使用阿里云YUM源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
[kubernetes] 
name=Kubernetes 
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
enabled=1 
gpgcheck=0 
repo_gpgcheck=0 
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
EOF

yum clean all && yum makecache

在这里插入图片描述

# 集群软件安装 
安装kubeadm、kubelet和kubectl
yum install kubeadm kubelet kubectl -y

# 查看所有的可用版本 
yum list kubeadm kubelet kubectl --showduplicates | sort -r

# 默认安装的版本就是最新版1.24.X,当然也可以指定版本安装 ,如 yum install kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 
yum install kubeadm kubelet kubectl 
#安装后查看版本 
kubeadm version 
kubeadm version: &version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.2", GitCommit:"f66044f4361b9f1f96f0053dd46cb7dce5e990a8", GitTreeState:"clean", BuildDate:"2022-06-15T14:20:54Z", GoVersion:"go1.18.3", Compiler:"gc", Platform:"linux/amd64"} 

# 配置kubelet的cgroup 
# 为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。 $ cat <<EOF > /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" EOF 

# 设置kubelet开机自启 
systemctl enable kubelet

做完基础环境,建议创建快照,后续会分别使用三种不同方式创建集群。

集群创建方式1:containerd
安装containerd
直接安装docker-ce源 
# step 1: 安装必要的一些系统工具	
yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo 
# Step 3 
sed  -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo 
# Step 4:查询软件包 
yum list | grep containerd

# Step 5:安装软件包 
yum install containerd -y
# Step 6:初始化默认配置 
containerd config default | tee /etc/containerd/config.toml

# Step 7:修改containerd配置更改
cgroup sed -i "s#SystemdCgroup\ \=\ false#SystemdCgroup\ \=\ true#g" /etc/containerd/config.toml 
# Step 8:修改镜像源 
sed -i "s#k8s.gcr.io#registry.aliyuncs.com/google_containers#g" /etc/containerd/config.toml
# Step 9:配置crictl 
cat <<EOF | tee /etc/crictl.yaml 
runtime-endpoint: unix:///run/containerd/containerd.sock 
image-endpoint: unix:///run/containerd/containerd.sock 
timeout: 10 
debug: false 
EOF

systemctl daemon-reload 
systemctl restart containerd 
systemctl enable containerd
# 验证是否可用 
crictl pull nginx:alpine #拉取镜像 
crictl rmi nginx:alpine #删除镜像
crictl images 查看镜像
初始化 Master 节点

通过配置文件初始化
1)生成并修改配置文件

# 生成配置文件 
kubeadm config print init-defaults > kubeadm.yml

修改如下配置:

advertiseAddress:为控制切面地址,( Master 主机 IP )
criSocket:为 containerd 的 socket 文件地址
imageRepository:阿里云镜像代理地址,否则拉取镜像会失败
kubernetesVersion:为 k8s 版本
注意:一定要配置镜像代理,否则会由于防火墙问题导致集群安装失败

在这里插入图片描述

2)初始化 K8S 集群

# 查看所需镜像列表 
kubeadm config images list --config kubeadm.yml 
# 拉取镜像 
kubeadm config images pull --config kubeadm.yml 
# 根据配置文件启动 kubeadm 初始化 k8s 
kubeadm init --config=kubeadm.yml --upload-certs --v=6

如果初始化失败:

#iptables里面没有写入东西
modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward

在这里插入图片描述

添加 Worker 节点

两个节点都需要添加!

#iptables里面没有写入东西
	modprobe br_netfilter
	echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
	echo 1 > /proc/sys/net/ipv4/ip_forward	
kubeadm join 192.168.121.153:6443 --token 

abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:acad442584595756a6e7f57ca2886ab3819b3154cd0bd26943032fae3b44aa5a

在这里插入图片描述

安装网络插件

没有安装之前查看集群节点

kubectl get nodes

NAME     STATUS     ROLES           AGE     VERSION
master   NotReady   control-plane   10m     v1.24.3
node2    NotReady   <none>          7m36s   v1.24.3
node3    NotReady   <none>          5m23s   v1.24.3

kubectl get nodes

下载,这里我们安装 flannel

wget http://down.i4t.com/k8s1.24/kube-flannel.yml
# 根据需求修改网卡配置,这里以eth0为主 
containers: 
- name: kube-flannel 
  image: rancher/mirrored-flannelcni-flannel:v0.17.0 
  command: 
  - /opt/bin/flanneld 
  - args: 
  - - --ip-masq 
  - - --kube-subnet-mgr 
  - - --iface=eth0 # 如果是多网卡的话,指定内网网卡的名称

执行:
	
kubectl apply -f kube-flannel.yml

在这里插入图片描述
kubectl命令出现错误“The connection to the server localhost:8080 was refused”
解决方法:

1.将主节点(master)中的“/etc/kubernetes/admin.conf”文件拷贝到从节点相同目录下
2.配置环境变量

	echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
3.立即生效
	source ~/.bash_profile
服务部署
# 部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine

# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看服务状态
kubectl get pods,service
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐