目录

Kubernetes-的正式安装

Kubernetes 的正式安装

1.基础的网络结构说明

https://i-blog.csdnimg.cn/direct/a0dc9050506e4e4f8333451f8047cd2f.png

软件路由器

ikuai

https://i-blog.csdnimg.cn/direct/ef2cf72921934e48997ea3657ab4b89a.png

当然同一个仅主机模式 相当于在 同一个我们所谓的广播域内 所以相当于它们的几张网卡 是被连接起来的

https://i-blog.csdnimg.cn/direct/b7849357913a473684e58ad37e29eaf3.png

为了防止出现问题 我们可以把第二块网卡临时关闭一下

https://i-blog.csdnimg.cn/direct/bf107097ad4d4f5f8aba843425e7b446.png

2.准备路由器

ikuai

https://i-blog.csdnimg.cn/direct/89ddac550335486eaad1c8035915ccd6.png

https://i-blog.csdnimg.cn/direct/42d581a86d6c4756b69f6fae3603f5a9.png 测试环境用 32位就可以了 因为用不到那么高性能,完全浪费,但是生产环境必须64位

https://i-blog.csdnimg.cn/direct/086083d1c11d40e2b0954f5eaefd6217.png

https://i-blog.csdnimg.cn/direct/fe078d079de24e8a810f9b55073619da.png https://i-blog.csdnimg.cn/direct/712174bebee441a1a1963c0e6154929d.png

https://i-blog.csdnimg.cn/direct/8a1554a6a30f4d7fac50487eaa971f22.png https://i-blog.csdnimg.cn/direct/ee5435c4de2f4743b9616641e237c40f.png

https://i-blog.csdnimg.cn/direct/3d7d2fa3ce6c41fca6b1984aa552ba19.png

https://i-blog.csdnimg.cn/direct/d198e707efa94a5091af215db52f6012.png

https://i-blog.csdnimg.cn/direct/3f1cf86d24394c0ba7a3c27eb7789f40.png

https://i-blog.csdnimg.cn/direct/7201d023c6674b718e5ddbc5e682589a.png

https://i-blog.csdnimg.cn/direct/753c7a641dfb4b63b314de2ad1799d98.png

https://i-blog.csdnimg.cn/direct/f8e205a07a5546c9a15199ccbaba21b5.png

https://i-blog.csdnimg.cn/direct/ec769de4a0764b1d925b672f2f9b9d95.png

https://i-blog.csdnimg.cn/direct/6c56b49e839e4d4dbe0c0632e198464d.png

https://i-blog.csdnimg.cn/direct/f8d7ed7df3f64cc18929aabb0f6afe5a.png

https://i-blog.csdnimg.cn/direct/7b94740367074021a0c59a467eee19fb.png

https://i-blog.csdnimg.cn/direct/c55d121b5c9c44a8b856e41859a7fcd9.png

https://i-blog.csdnimg.cn/direct/584431371c364057bd60de89918891aa.png

https://i-blog.csdnimg.cn/direct/f9397f19128b432c93af4f0227361fc8.png

https://i-blog.csdnimg.cn/direct/188b9fadcacd4edd9ea5766f19c84360.png 1  回车

https://i-blog.csdnimg.cn/direct/ecf47c2da2284e61b214561c7c7dfeed.png

需要配置一定的信息

选择2 回车

https://i-blog.csdnimg.cn/direct/660d61ed23d94efabc451da80bf4ad8d.png

https://i-blog.csdnimg.cn/direct/92a19ab3ecc94d6cb8a774198d1e38e9.png https://i-blog.csdnimg.cn/direct/cb8ba01a64024d6aa6fe1bf31564771c.png https://i-blog.csdnimg.cn/direct/73979be707374345af0c24361b31620b.png

esc 返回

https://i-blog.csdnimg.cn/direct/65bea70b0c3f49d28f72474603b2cba5.png q 退出

https://i-blog.csdnimg.cn/direct/b3effaae732044449ca6a33189ebb644.png

https://i-blog.csdnimg.cn/direct/5d9ea1ffe29449d6b638e51a73921970.png q 锁定 就可以离开这里了

浏览器输入 192.168.72.200 默认重定向到这里

https://i-blog.csdnimg.cn/direct/4d9feaa9e1c2438a99f38e9ee7b960e1.png

用户名密码都是admin

https://i-blog.csdnimg.cn/direct/cb32568b93de4fd6acf5d623c60d7627.png 纯软件实现的路由器

https://i-blog.csdnimg.cn/direct/46ef2b2a96f04cfc950ec9dd73aea3fd.png

https://i-blog.csdnimg.cn/direct/3ee81f9537a644729964470b312d1526.png 关闭

https://i-blog.csdnimg.cn/direct/e4e4dc9bbb644422877bd24c4fdd8a49.png

绑定外网网卡

https://i-blog.csdnimg.cn/direct/d98091aa903844f6b5510cb2c67b6d3e.png 把剩下的一块网卡进行绑定

https://i-blog.csdnimg.cn/direct/29c6ebb0c7bd4b8e81685c254d8dddda.png

默认是DHCP

但在真实生产环境中我们都是通过 拨号 或者 静态固定IP去提供网络访问能力的

https://i-blog.csdnimg.cn/direct/6ade177e8f4b4265999ff12693468bd2.png https://i-blog.csdnimg.cn/direct/f27944ab85db4285848105898d9d0a8e.png

3.配置虚拟机

1.配置第一块仅主机网卡

vi /etc/NetworkManager/system-connections/ens160.nmconnection

三台机器都改完

address1=仅主机的ip/子网掩码位,网关路由器ip

dns 域名 加一下

https://i-blog.csdnimg.cn/direct/86b5c8370f30456da5e98b7090277a0d.png https://i-blog.csdnimg.cn/direct/e703a2cee36349c7beffd952436ae1a7.png

2.关闭第二块nat网卡

vi /etc/NetworkManager/system-connections/ens192.nmconnection

https://i-blog.csdnimg.cn/direct/29861d3c766c43ea88ab80ca9d4e0aa9.png

autoconnect=false

三台主机配置完

:wq 保存退出

3.重启

如果重启就不用执行下面三条命令了 三台机器都做 https://i-blog.csdnimg.cn/direct/7ddf92c3a10349018d89585f940e5945.png

先不重启在做完下面配置在重启

4.关闭swap分区

如果你的机器本身初始化出来就是为了安装kubernetes集群的 你在分区的时候就没必要分 swap 分区

如果分了 那么怎么关闭

下面就是关闭的方法

swapoff -a

相当于把开机自启的那个命令注释掉

sed -i 's:/dev/mapper/rl-swap:#/dev/mapper/rl-swap:g' /etc/fstab

https://i-blog.csdnimg.cn/direct/1c43bbd3883345bcaef283eefed7f122.png

不是永久执行的 执行上面第二条命令即可永久 生效

5.修改主机名

hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02

设置域名

vi /etc/hosts
192.168.72.11 k8s-master01 m1
192.168.72.12 k8s-node01 n1
192.168.72.13 k8s-node02 n2
192.168.72.14 harbor

m1 位为简写

n1 同理

后面可能搭建 harbor 所以提前设置一下用到的域名

https://i-blog.csdnimg.cn/direct/b3248087c98d47fab3b6362c6fcc607c.png

嫌麻烦可以拷贝到另一台主机上

6.安装 ipvs

yum install -y ipvsadm

7.开启每个节点的路由转发

echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p

8.安装epel 加载 bridge

yum install -y epel-release
yum install -y bridge-utils

9.加载 br_netfilter 模块

modprobe br_netfilter
echo 'br_netfilter' >> /etc/modules-load.d/bridge.conf
echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables=1'>> /etc/sysctl.conf
sysctl -p

10.安装docker

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
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

1.配置daemon.json

sudo cat <<EOF > /etc/docker/daemon.json
{
    "default-ipc-mode": "shareable",
    "data-root": "/data/docker",
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m",
        "max-file": "100"
    },
    "insecure-registries": ["harbor.xinxainghf.com"],
    "registry-mirrors": [
          "https://hub.skillixx.com",
          "https://docker.m.daocloud.io",
          "https://noohub.ru",
          "https://huecker.io",
          "https://dockerhub.timeweb.cloud",
          "https://docker.rainbond.cc",
          "https://hpbe2ezf.mirror.aliyuncs.com",
          "https://kfp63jaj.mirror.aliyuncs.com"
     ]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d

2.重启docker

systemctl daemon-reload
systemctl enable --now docker

11.重启一下

reboot

https://i-blog.csdnimg.cn/direct/6c5ad00e9823431592d9c088b53a1710.png

完美运行

4.安装 cri-docker

讲解一下

CRI关系图

https://i-blog.csdnimg.cn/direct/e30176a81a8f4f64a454de4312935aeb.png

kubernetes 想要移出docker 移出的是 中间的转化的关系 也就是 CRI语言转化为 OCRI

但是docker 又有公司实现了 CRI 转化为 OCRI 名为 cri-docker

1.下载cri-docker

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz
tar -xf cri-dockerd-0.3.9.amd64.tgz
mv ./cri-dockerd/cri-dockerd /usr/bin/
chmod a+x /usr/bin/cri-dockerd

2.编写服务管理脚本

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=O
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

用多少版本就几版本

docker pull registry.aliyuncs.com/google_containers/pause:3.8

3.添加cri-docker 套接字生成脚本

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

4.启动cri-docker服务

sudo systemctl daemon-reload
systemctl enable --now cri-docker
systemctl is-active cri-docker

https://i-blog.csdnimg.cn/direct/34a815dfc3264d2c93e8b7e9f4d43642.png

5.安装 kubeadm

1.添加yum源

cat <<EOF | sudo tee /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

2.安装kubeadm 1.29

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

3.设置开机自启

sudo systemctl enable  kubelet

4.初始化主节点

kubeadm init --apiserver-advertise-address=192.168.72.11 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.29.14 --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 

如果科学上网 可以不加

–kubernetes-version 1.29.14

–image-repository registry.aliyuncs.com/google_containers

重要重要重要!!!

一定要在三个节点都拉去 pause 镜像 他可能会用到两个版本的 我这里有 kubeadm config images list 指定的 3.9 但是 他初始化的时候用的 3.6所以最好两个版本都下 然后三个节点都要拉取镜像 要不然会有问题 ,经验 !!!!!!!!!!

 mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

5.将另外两个节点加入集群

kubeadm join 192.168.72.11:6443 --token c52o1r.gxeerfkrhsx0zen1 \
        --discovery-token-ca-cert-hash sha256:eb622ff0b73ad808efde62dd362daee34b00fa7f541cb227a907d86ee72f31a4 --cri-socket unix:///var/run/cri-dockerd.sock 

–cri-socket unix:///var/run/cri-dockerd.sock 需要在命令指定套接字 为 docker

https://i-blog.csdnimg.cn/direct/6bd358be2fcd49209f7bc004ec5113d8.png

1.检查是否加入

kubectl get node

2.如果token过期后 需要重新创建

kubeadm token create --print-join-command

6.部署网络插件

1.安装calico

https://i-blog.csdnimg.cn/direct/590fd9b01fba498996271cc59b04ffca.png

准备好

unzip ./calico.zip

https://i-blog.csdnimg.cn/direct/0cea653af2c044489ed06e418cf23f39.png

https://i-blog.csdnimg.cn/direct/900ecc6ba6d64dfc9801ca4c685790d3.png https://i-blog.csdnimg.cn/direct/d15ad2930a1342dab358c9c97c92ce4d.png https://i-blog.csdnimg.cn/direct/a8c13a388b3641999cbf45384d547be5.png 这是calico运行所需要的所有的镜像

1.解压镜像

tar -zxvf calico-images.tar.gz

https://i-blog.csdnimg.cn/direct/3f6cdf796e0f4f53a54d58bb70374f7e.png

2.加载镜像

这四个镜像每个节点都要导入

docker load -i calico-cni-v3.26.3.tar
docker load -i calico-node-v3.26.3.tar
docker load -i calico-kube-controllers-v3.26.3.tar
docker load -i calico-typha-v3.26.3.tar

传输到 n1 的设备 下 的 /root

scp -r calico-images root@n1:/root/

https://i-blog.csdnimg.cn/direct/99c577a8031b49e8b38bfeb4d29fe27d.png

3.执行安装

把部署文件利用在集群上

kubectl apply -f calico-typha.yaml

这个文件需要改一些地方

https://i-blog.csdnimg.cn/direct/1bb7ad43f9414647a615a8f4a2676c4c.png

关闭IPIP

https://i-blog.csdnimg.cn/direct/58d1daf786754288bd61ce000022f0b9.png

需要与前面创建集群的时候 那个 pod cidr一致

https://i-blog.csdnimg.cn/direct/b080e4f519ba447fa8d023847de28ccb.png

https://i-blog.csdnimg.cn/direct/628925e8fd404d08a11702170f09e9f1.png 查看网络的 pod

 kubectl get pod -A

需要 在子节点 装 pause 的镜像 没有就起不来 这是经验

https://i-blog.csdnimg.cn/direct/9caadb6fe9154e60a72e86df266d5fc1.png

完美运行一个集群 三个节点

7.如果我们在安装集群时有多块网卡并且没有关闭

1.固定网卡(可选)

指定目标域名可达的网卡

https://i-blog.csdnimg.cn/direct/06e403cac53644489bb69b572b2444d2.png

匹配正则的网卡

https://i-blog.csdnimg.cn/direct/24bc0b1e62d7472c931f8794062cad57.png

忽略正则的网卡

https://i-blog.csdnimg.cn/direct/7e8a31d3adc7427593f12d3ec446847d.png

指定一个网段范围

https://i-blog.csdnimg.cn/direct/e88976122fb546caab08b590ea95408e.png

修改kube-proxy 模式为 ipvs

这几种方式