三、k8s 1.29 之 安装2
一、环境初始化
1、关闭swap分区
swap分区是当内存即将耗尽的时候,将小块磁盘当做内存使用,但由于磁盘的读写速度远低于内存,所以会影响集群性能
free -m
查看swap分区
swapoff -a 临时关闭
永久关闭,swap
原理是注释掉配置文件中的swap分区命令
sed -i 's:/dev/mapper/rl-swap:#/dev/mapper/rl-swap:g' /etc/fstab
2、修改主机名
因为kubeadm在安装kubernetes的时候,会默认将主机名称设置成节点名称,当前三台主机名都叫localhost,有点别扭
hostnamectl set-hostname k8s-master01hostnamectl set-hostname k8s-node01 / 02
编辑
vi /etc/hosts
habor是后期的镜像仓库
192.168.125.101 k8s-master01 m1
192.168.125.102 k8s-node01 n1
192.168.125.103 k8s-node02 n2
192.168.125.104 harbor
测试,任意节点
ping n1
3、安装ipvs
yum install -y ipvsadm
4、开启路由转发
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf刷新生效
sysctl -p
5、加载bridge(可选)
帮助我们后期做调试
yum install -y epel-release
yum install -y bridge-utils
开启过滤机制
modprobe br_netfilter
echo 'br_netfilter' >> /etc/modules-load.d/bridge.conf
echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysct1.conf
echo 'net.bridge.bridge-nf-call-ip6tables=1' >>/etc/sysct1.conf刷新
sysctl -p
6、安装docker
略
详细见 一、k8s 1.29 之 docker 模拟 pod
reboot
7、检查
ip addr
可见192网卡已经没信息了
ping www.baidu.com
ikuai -- 终端监控 -- ipv4
这就是在生产环境中真实的网络拓扑结构
8、安装 cri-docker
前因后果
docker 的语言是 OCRI ,其他容器是CRI,k8s官方为了统一kubelet 发出的命令,所以给 docker开发了个翻译器,将CRI 翻译为 OCRI
docker之死:k8s公司突然决定不维护这个翻译器了,
最后docker公司自己维护了个翻译器,就叫 cri-docker
------------------------------------------------------------------------------
cd /rootwget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgztar -xf cri-dockerd-0.3.9.amd64.tgz移动可执行文件
mv cri-dockerd/cri-dockerd /usr/bin/增加可执行权限
chmod a+x /usr/bin/cri-dockerd
编写服务管理脚本
cat <<"EOF" > /usr/lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
添加套接字脚本
cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
启动并启用 cri-docker 服务
重新加载 systemd 系统管理器的配置文件
systemctl daemon-reload设置cri-docker服务在系统启动时自动运行
systemctl enable cri-dockersystemctl start cri-docker检查cri-docker服务
systemctl is-active cri-docker
二、安装组件
1、安装kubeadm
1.1 上传安装 | 推荐
将下载好的 “kubernetes-1.29.2-150500.1.1.tar” 压缩包上传到各节点的 /root 的目录下
解压
tar -zxvf kubernetes-1.29.2-150500.1.1.tar.gz
安装所有本地软件包
cd kubernetes-1.29.2-150500.1.1yum -y install *
设置 kublet 开机自启
systemctl enable kubelet.service
启动过程: linux -- docker --- cri-docker -- 容器
上面的启动过程,docker会启动容器,但是容器噶了他不管,所以引入kubulet,它是引导k8s启动的关键
linux -- docker --- cri-docker -- 容器 -- kubulet -- apiserver...
1.2 下载安装
添加 kubeadm yum 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
安装 kubeadm 1.29 版本
yum install -y kubelet-1.29.0 kubectl-1.29.0 kubeadm-1.29.0
systemctl enable kubelet.service
2、初始化主节点
kubeadm init --apiserver-advertise-address=192.168.125.101 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.29.2 --service-cidr=10.10.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all --cri-socket unix:///var/run/cri-dockerd.sock
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get node 查看看见一个未就绪的节点
两个从节点执行
kubeadm join 192.168.125.101:6443 --token tuk8yr.xa4i0nwtva8fe7sh --discovery-token-ca-cert-hash sha256:e653da5eaace182a42b24dc05e78ce21f21cc6b86db93498e08cc00eccfc51a1 --cri-socket unix:///var/run/cri-dockerd.sock
前面一段是主节点产生的
再次 get node 看见一主两从
3、安装网络插件
下载解压工具
yum -y install unzip
上传 calico 压缩包到 /root
解压缩
unzip calico.zip
进入解包目录
前两个分别是 calico 用到的所有镜像 、 配置文件
解压
tar -zxvf calico-images.tar.gz
选中四个镜像,三个节点都要导入到docker
在 /root/calico 下docker load -i calico-images/calico-cni-v3.26.3.tar
docker load -i calico-images/calico-kube-controllers-v3.26.3.tar
docker load -i calico-images/calico-node-v3.26.3.tar
docker load -i calico-images/calico-typha-v3.26.3.tar
在集群 主机 主节点上 应用部署文件
kubectl apply -f calico-typha.yaml
部署前 节点都没准备好,部署后稍得节点就变成就绪了
使用之前 查看配置文件是否改了
a
b 网段
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.3/manifests/calico-typha.yaml -o calico.yamlCALICO_IPV4POOL_CIDR 指定为 pod 地址# 修改为 BGP 模式
# Enable IPIP
- name: CALICO_IPV4POOL_IPIPvalue: "Always" #改成Off
查看 pod
kubectl get pod -A
这样代表集群已经安装好了,拍照保存
三、其他
1、网络证书
在 /etc/kubernetes/pki 下有很多 https的证书,用来加密容器之间的通信