K8s指南
1)k8s环境准备
基本设置(前置条件)
(针对master和node)
#1.各个机器设置自己的域名
hostnamectl set-hostname xxxx
--------------------------------------------------------------------------------------------------------------------------------
# 2.将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
--------------------------------------------------------------------------------------------------------------------------------
# 3.加载br_netfilter模块
#由于开启内核 ipv4 转发需要加载 br_netfilter 模块,所以加载该模块,但是这个模块不会默认加载,所以我们开启后还要设置开机自动加载这个模块
# 设置开机自动加载这个模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
#立刻加载
modprobe br_netfilter
#(配置内核参数)允许iptables,检查桥接流量,桥接的IPv4流量传递到iptables
cat <<EOF | sudo 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
#应用内核参数
sudo sysctl --system
--------------------------------------------------------------------------------------------------------------------------------
# 4.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#时间同步(Linux AMD64)
yum install ntpdate -y
ntpdate time.windows.com
#时间同步(Linux ARM64)
timedatectl list-timezones #查看时区
sudo timedatectl set-timezone <timezone> #设置时区
--------------------------------------------------------------------------------------------------------------------------------
#--------5. 重启服务器----------
sudo reboot
容器运行时(containerd)
#k8s提供有crictl来进行镜像管理,相当于docker-cli。因此我们只需要安装containd便可以对容器进行管理
注意:K8s在v1.24 之后不再维护docker,因此容器变成了containerd
注意:配置国内安装docker和containerd的阿里云的repo源
yum install yum-utils -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
--------------------------------------------------------------------------------------------------------------------------------
#1、安装containerd(安装最新版本)
yum install containerd.io -y
#查看containerd版本号
containerd -version
--------------------------------------------------------------------------------------------------------------------------------
#2、生成containerd的配置文件
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
#修改配置文件:
vim /etc/containerd/config.toml
===========================================
#(1)containerd推荐使用Systemd驱动
#把SystemdCgroup = false修改成SystemdCgroup = true
#(2)修改镜像
#把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.10"
===========================================
--------------------------------------------------------------------------------------------------------------------------------
#3、配置containerd开机启动,并启动containerd
systemctl enable containerd --now
#查看containerd运行状态
systemctl status containerd
#修改/etc/crictl.yaml文件,让运行时和拉取镜像时使用containerd
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
#重启containerd,使crictl.yaml配置生效
systemctl restart containerd
--------------------------------------------------------------------------------------------------------------------------------
#4、配置containerd镜像加速器,k8s所有节点均按照以下配置
#修改配置路径
vim /etc/containerd/config.toml
============================================
找到config_path = "",修改成如下目录:config_path = "/etc/containerd/certs.d"
============================================
#创建配置文件
mkdir /etc/containerd/certs.d/docker.io/ -p
vim /etc/containerd/certs.d/docker.io/hosts.toml
========================================================
server = "https://docker.io"
[host."https://docker.xuanyuan.me",host."https://docker.m.daocloud.io"]
capabilities = ["pull", "resolve"]
========================================================
注意:当上述加速地址不可用,需更改加速地址重新拉去镜像
国内加速地址:https://xuanyuan.me/blog/archives/1154
#重启containerd:
systemctl restart containerd
2)安装Kubernetes
# 1. 配置下载阿里云的repo源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
--------------------------------------------------------------------------------------------------------------------------------
# 2. 开启ipvs,提高速度(此处开启ipvs,后面对于k8s的proxy的代理节点,将网络模式更改为ipvs)
--->(ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的 4 层 LAN 交换,作为 Linux 内核的一部分。ipvs 运行在主机上,在真实服务器集群前充当负载均衡器。ipvs 可以将基于 TCP 和 UDP 的服务请求转发到真实服务器上,并使真实服务器的服务在单个 IP 地址上显示为虚拟服务。
问题 2:ipvs 和 iptable 对比分析
kube-proxy 支持 iptables 和 ipvs 两种模式, 在 kubernetes v1.8 中引入了 ipvs 模式,在 v1.9 中处于 beta 阶段,在 v1.11 中已经正式可用了。iptables 模式在 v1.1 中就添加支持了,从 v1.2 版本开始 iptables 就是 kube-proxy 默认的操作模式,ipvs 和 iptables 都是基于 netfilter 的,但是 ipvs 采用的是 hash 表,因此当 service 数量达到一定规模时,hash 查表的速度优势就会显现 出来,从而提高 service 的服务性能。那么 ipvs 模式和 iptables 模式之间有哪些差异呢?
pvs 为大型集群提供了更好的可扩展性和性能
ipvs 支持比 iptables 更复杂的复制均衡算法(最小负载、最少连接、加权等等)
ipvs 支持服务器健康检查和连接重试等功能)
<---
#编写ipvs算法
cd /etc/sysconfig/modules/
vim ipvs.modules
================================================================
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
/sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
if [ 0 -eq 0 ]; then
/sbin/modprobe ${kernel_module}
fi
done
================================================================
#授予可执行权限
chmod 755 /etc/sysconfig/modules/ipvs.modules
#执行
bash /etc/sysconfig/modules/ipvs.modules
#查看
lsmod | grep ip_vs
(检查ipvs模块是否已经加载。如果返回结果中包含ip_vs及其相关模块(如ip_vs_rr、ip_vs_wrr等),则表示ipvs模块已加载)
--------------------------------------------------------------------------------------------------------------------------------
#3、kubeadm、kubelet、kubectl安装
yum install -y kubeadm-1.26.0 kubectl-1.26.0 kubelet-1.26.0
#配置cgroup驱动改为systemd
sed -i 's/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"/g' /etc/sysconfig/kubelet
#kubelet设置开机自启
systemctl enable kubelet
--------------------------------------------------------------------------------------------------------------------------------
#4、初始化节点
mkdir kubernetes
cd ./kubernetes/
kubeadm config print init-defaults > kubeadm.yaml
vim kubeadm.yaml
=======================================================================
#修改的点
#(1)advertiseAddress:192.168.86.124 [控制节点的ip]
#(2)criSocket:unix:///run/containerd/containerd.sock [容器运行时]
#(3)nodeRegistration.name:k8sm1 [控制节点主机名]
#(4)imageRepository:registry.cn-hangzhou.aliyuncs.com/google_containers [指定阿里云镜像仓库地址]
#(5)kubernetesVersion:1.26.0 [跟kubeadm等版本保持一致]
#(6)networking.podSubnet: 10.244.0.0/16 [指定pod网段, 需要新增加这个]
#(7)serviceSubnet: 10.96.0.0/12 [指定Service网段]
#(8)在文件最后,插入以下内容,(复制时,要带着---):
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
#kube-proxy的模式为 ipvs,由于我们使用的containerd作为运行时,并且驱动改成了systemd,所以在初始化节点的时候需要指定cgroupDriver为systemd
=======================================================================
#基于kubeadm.yaml初始化k8s集群
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#查看
kubectl config view
#配置完上面之后,就可以访问node
kubectl get nodes
3)安装网络组件-Calico
#1、下载calico.yaml
wget https://docs.tigera.io/archive/v3.25/manifests/calico.yaml --no-check-certificate
#2、编辑文件
vim calico.yaml
=======================================================================
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
# Cluster type to identify the deployment type
- name: CLUSTER_TYPE
value: "k8s,bgp"
# 添加网卡(网卡需要查看Linux的主机,ip addr 来选择添加的网卡信息)
- name: IP_AUTODETECTION_METHOD
value: "interface=ens192"
=======================================================================
kubectl apply -f calico.yaml
kubectl get pods -n kube-system
4)工作节点加入
#1、在master1节点查看加入集群命令
kubeadm token create --print-join-command
#2node节点执行上面显示的命令
kubeadm join 192.168.3.11:6443 --token vgq333.bvbtfemn2cslcabp --discovery-token-ca-cert-hash sha256:7b3f73b3bde32400f894904ac929fac70be2f600b98a14e2dd8fccde738c9d2a
#3、在master查看node状态,此时节点已经加入
kubectl get nodes
#查看运行了那些pod
kubectl get pods -n kube-system -owide
4)服务测试
#1、下载busybox镜像
sudo crictl pull docker.io/library/busybox:1.28
#2、根据busybox镜像创建pod,并且进入
#进去后能ping通百度,说明calico网络插件已经被正常安装了(ping www.baidu.com)
kubectl run busybox --image docker.io/library/busybox:1.28 --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh
#进去后执行nslookup kubernetes.default.svc.cluster.local,可以看到ip就是coreDNS的clusterIP,说明coreDNS配置好了。解析内部Service的名称,是通过coreDNS去解析的
=================== 至此,k8s服务部署完成!!!=====================
标签:指南,kubectl,--,containerd,etc,ipvs,K8s,config,搭建 From: https://www.cnblogs.com/zxlyy/p/18590363