【kubernetes】环境准备及K8S安装【最新完整版】

一,K8S架构:

主节点(1台 master)+ 工作节点 (2台 node01和node02)

podSubnet(pod网段) 10.244.0.0/16
serviceSubnet(service网段): 10.96.0.0/12

实验环境规划:
配置: 4Gib内存 / 4vCPU / 60G硬盘
网络:NAT模式

二,最佳稳定组合:

centoscontainerdkubeletkubeadmkubectlkubernetescalicodockers
7.91.6.221.25.01.25.01.25.01.25.0v3.26.124.0.6

先安装containerd ,然后在安装 docker(主要用于创建dockerfile镜像)

三,准备

(一)基础环境

1,机器设置静态ip

# vim /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.40.180
NETMASK=255.255.255.0
GATEWAY=192.168.40.2
DNS1=192.168.40.2

设置完毕后,重启:

service network restart

2,升级centos7.9版本:

# 更换源
yum install wget -y
mv /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 清理缓存
yum makecache
# 安装内核
wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install epel-release

# 升级并重启
yum update -y;
reboot;

3,关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#如果显示Disabled说明selinux已经关闭
getenforce

4,配置/ 互相绑定主机名

设置主机名,并刷新:

hostnamectl set-hostname master && bash

绑定主机名:

# /etc/hosts
192.168.40.180   master
192.168.40.181   node1  
192.168.40.182   node2

5,主机之间免密登录

每台机器同样操作

# 一直回车,不输入密码
ssh-keygen 
ssh-copy-id  master

# 测试登录
ssh master

6,关闭交换分区swap

# 临时关闭
swapoff -a

# 永久关闭
vi /etc/fstab   
#/dev/mapper/centos-swap swap      swap    defaults        0 0

如果是克隆的虚拟机,需要同时删除UUID

7,修改机器内核参数

每台机器执行同样操作

# 加载内核
modprobe br_netfilter

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

# 查看加载
sysctl -p /etc/sysctl.d/k8s.conf

sysctl:在运行时配置内核参数工具
-p :从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

8,关闭firewalld防火墙

systemctl stop firewalld && systemctl disable firewalld

9,配置安装阿里云的repo源

安装docker和containerd,都需要配置安装阿里云的repo源。

# 安装工具
yum install yum-utils -y

# 安装阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 配置国内阿里云docker的repo源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

10,安装k8s组件需要的阿里云的repo源

安装k8s组件需要的阿里云的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

11,时间同步

每台机器,都做相同操作

# 安装ntpdate命令
yum install ntpdate -y

# 跟网络时间做同步
ntpdate cn.pool.ntp.org

# 把时间同步做成计划任务
crontab -e
* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org

# 重启crond服务
service crond restart

12,安装基础软件包

yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack telnet ipvsadm

(二)安装所需软件

13,安装containerd

# 下载安装
yum install containerd.io-1.6.22*  -y

# 添加配置
cd /etc/containerd
rm -rf *

下载配置文件:config.toml

创建修改config.toml配置文件里的harbor的ip地址,变成真实环境的harbor的ip
在这里插入图片描述
重启,并设置开机启动

systemctl start containerd && systemctl enable containerd
或者
systemctl enable containerd  --now

14,安装初始化k8s需要的软件包

# 安装
yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0

# 开机启动
systemctl enable kubelet
  • Kubeadm: 用来初始化k8s集群的一个工具
  • Kubelet: 安装在集群所有节点上,用于启动Pod的,kubeadm安装k8s,k8s控制节点和工>作节点的组件,都是基于pod运行的,只要pod启动,就需要kubelet
  • Kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

15,kubeadm初始化k8s集群

# 每台机器设置容器运行时
crictl config runtime-endpoint /run/containerd/containerd.sock

# 仅仅在master机器上 生成文件
 kubeadm config print init-defaults > kubeadm.yaml

一定要自己通过kubeadm config print init-defaults命令生成!

修改生成的配置文件(总共6处):

# 1处:改为master控制节点的ip
advertiseAddress: 192.168.40.180 

# 2处:指定containerd容器运行时
criSocket: unix:///run/containerd/containerd.sock  

# 3处:改为控制节点主机名
name:  master

# 4处:指定阿里云镜像仓库地址
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

# 5处:指定pod网段, 在serviceSubnet: 10.96.0.0/12下方,新增加这个
podSubnet: 10.244.0.0/16 

# 6处:在文件最后,插入以下内容,(复制时,要带着---):
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

K8S初始化镜像包:k8s_1.25.0.tar.gz

# 导入所需要的镜像包
ctr -n=k8s.io images import k8s_1.25.0.tar.gz

# 开始安装
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

在这里插入图片描述

安装成功!按提示执行栅条命令:

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

测试:

kubectl get nodes
kubectl get pods -n kube-system -owide

16,添加工作节点node01

# 在master机器执行,查看加入节点的命令:
kubeadm token create --print-join-command

# 在node1机器执行,把node1加入k8s集群:
kubeadm join 192.168.40.180:6443 --token vulvta.9ns7da3saibv4pg1  --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a --ignore-preflight-errors=SystemVerification

忽略无效检查:--ignore-preflight-errors=SystemVerification

【注意】:该命令如果重复执行 或者添加失败时,可以执行以下命令:

kubeadm reset

添加查看标签:

kubectl label nodes node1 node-role.kubernetes.io/work=work

在这里插入图片描述

17,安装网络组件-Calico

把安装calico需要的镜像calico.tar.gz传到master和node1、node2节点,手动解压:

ctr -n=k8s.io images import calico.tar.gz

calico.yaml到master上,修改1处:

# calico.yaml文件需要做如下修改:
- name: IP_AUTODETECTION_METHOD
  value: "interface=ens33"

在这里插入图片描述

使用yaml文件安装calico 网络插件:

kubectl apply -f  calico.yaml

18,延长k8s证书有效期

所需脚本:update-kubeadm-cert.sh

# 查看证书有效时间:
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text  |grep Not
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text  |grep Not

# 延长证书过期时间 
# 1.把update-kubeadm-cert.sh文件上传到master节点
# 2.在master上执行如下:
chmod +x update-kubeadm-cert.sh
./update-kubeadm-cert.sh all

19,安装docker做镜像

yum install docker-ce-24.0.6 -y
systemctl start docker
systemctl enable docker

配置docker镜像加速器地址:

# vi /etc/docker/daemon.json
{
 "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
} 


# 重启docker生效
systemctl restart docker

四,测试

1、测试在k8s创建pod是否可以正常访问网络

把busybox-1-28.tar.gz上传到node01、node02节点,手动解压。

docker load -i busybox-1-28.tar.gz

运行pod,测试ping命令:

kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh
/ # ping www.baidu.com
PING www.baidu.com (39.156.66.18): 56 data bytes
64 bytes from 39.156.66.18: seq=0 ttl=127 time=39.3 ms

如果可以ping通网络,说明calico网络插件安装正常!

2,测试coredns是否正常

kubectl run busybox --image busybox:1.28 --restart=Never --rm -it busybox -- sh


/ # nslookup kubernetes.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default.svc.cluster.local
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local

10.96.0.10 是coreDNS的clusterIP,说明coreDNS配置好了。
解析内部Service的名称,是通过coreDNS去解析的。

【注意】
busybox要用指定的1.28版本,因为最新版本的nslookup会解析不到dnsip

温馨提示:安装K8S所需的代码均可下载!!!

### 准备工作 为了在 CentOS 7 上安装最新的单节点 Kubernetes 集群,需先确保系统的更新至最新状态: ```bash sudo yum update -y ``` 随后关闭防火墙和 SELinux 来减少不必要的干扰。 ### 添加 Kubernetes 安装源 创建一个新的 YUM 源配置文件用于获取 Kubernetes 组件。通过编辑 shell 文件 `ks.sh` 并执行该脚本来完成此操作[^1]。 ```bash cat <<EOF > kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF mv kubernetes.repo /etc/yum.repos.d/ /bin/bash ks.sh ``` 对于 Docker 的安装,则可以通过添加阿里云的仓库来简化过程[^2]。 ```bash yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` ### 安装必要组件 接着可以利用上述已设置好的源来安装所需的软件包,包括但不限于 kubelet, kubeadm 和 kubectl。 ```bash sudo yum install -y kubelet kubeadm kubectl docker-ce ``` 启动并启用这些服务以便于开机自启。 ```bash sudo systemctl enable --now kubelet docker ``` ### 初始化集群 初始化 Kubernetes 主节点,指定 Pod 网络 CIDR 参数以适应后续 CNI 插件的需求。 ```bash sudo kubeadm init --pod-network-cidr=192.168.0.0/16 ``` 按照提示将当前用户的上下文环境切换到新建立的集群中,并确认 `.kube/config` 文件已被正确复制[^3]。 ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 此时应该能够使用 `kubectl get nodes` 查看节点的状态了。 ### 设置容器网络接口 (CNI) 选择合适的 CNI 插件是非常重要的一步。考虑到可能存在的网络问题,建议调整 Calico 插件中的 IP 自动检测方法,避免因错误的 IP 地址被选作 NodeIP 导致通信障碍[^4]。 下载并应用经过适当修改后的 Calico YAML 文件,比如指定了特定网卡名称或可达目标地址的方式来进行 IP 探测。 ```yaml apiVersion: operator.tigera.io/v1 kind: Installation metadata: name: default spec: ... cni: ipam: type: host-local ipAutodetectionMethod: "can-reach=8.8.8.8" ... --- apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: default-ipv4-ippool spec: cidr: 192.168.0.0/16 natOutgoing: true disabled: false ``` 最后应用这个定制化的配置文档: ```bash kubectl apply -f calico.yaml ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直奔跑在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值