一.环境准备
环境介绍
1.服务器阿里云服务器
2.镜像为centos 7.9
3.内核版本3.10.0-1160.105.1.el7.x86_64
4.docker 版本 Docker version 24.0.7, build afdd53b
5.k8s版本 Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.4", GitCommit:"fa3d7990104d7c1f16943a67f11b154b71f6a132", GitTreeState:"clean", BuildDate:"2023-07-19T12:20:54Z", GoVersion:"go1.20.6", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v5.0.1
- master,woker节点都要执行
1.安装必要工具
yum -y install vim*
yum -y install yum-utils
yum -y install wget
2.关闭防火墙
#关闭防火墙
systemctl stop firewalld
#禁止防火墙自启
systemctl disable firewalld
3.关闭selinux、swap
#永久关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
#永久关闭swap分区:
sed -ri 's/.*swap.*/#&/' /etc/fstab
#重启
reboot
4.设置主机名,添加hosts文件
#设置主机名 如k8s的master设置为:
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-worker
#添加hosts文件 每个节点都添加(这里的ip换成自己的)
cat >> /etc/hosts << EOF
172.17.249.124 k8s-master
172.17.249.125 k8s-worker
EOF
5.将桥接的IPv4流量传递到iptables的链
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
lsmod | grep br_netfilter
lsmod | grep overlay
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
# 如果init时仍提示iptables错误请执行
echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1">/proc/sys/net/ipv4/ip_forward
6.时间同步
yum install ntpdate -y
ntpdate time.windows.com
7.安装指定版本docker和cri-dockerd
7.1安装docker版本Docker version 24.0.7, build afdd53b
# 设置存储库,这里直接使用官方源不需要更换为国内源。
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动Docker,设置开机自启动,查看Docker状态为active (running) 即为启动成功。
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker
# 通过运行映像hello-world,验证 Docker 引擎安装是否成功
docker run hello-world
7.2安装cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4-3.el7.x86_64.rpm # 通过wget下载最新版cri-dockerd #这块下载会特别慢
rpm -ivh cri-dockerd-0.3.4-3.el7.x86_64.rpm
# 重载系统守护进程→设置cri-dockerd自启动→启动cri-dockerd
systemctl daemon-reload # 重载系统守护进程
systemctl enable cri-docker.socket cri-docker # 设置cri-dockerd自启动
systemctl start cri-docker.socket cri-docker # 启动cri-dockerd
systemctl status cri-docker.socket
7.3设置docker镜像加速,cri-dockerd设置国内镜像加速。
# 设置docker镜像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"insecure-registries": [ "registry-1.docker.io"]
}
EOF
# cri-dockerd设置国内镜像加速。
vi /usr/lib/systemd/system/cri-docker.service # 找到第10行ExecStart= 修改为
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker # 重启Docker组件,这个地方是个小技巧,连写会方便很多
systemctl status docker cir-docker.socket cri-docker # 检查Docker组件状态
8.添加阿里云的YUM软件源
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
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
二.安装kubernetes
1.安装kubelet-1.27.4 kubeadm-1.27.4 kubectl-1.27.4
yum -y install kubelet-1.27.4 kubeadm-1.27.4 kubectl-1.27.4 --disableexcludes=kubernetes
设置kubelet自启动
sudo systemctl enable --now kubelet
2.安装runc,这是Kubernetes必须要的运行环境。
从这个链接下载之后上传到服务器上面
https://github.com/opencontainers/runc/releases
- master节点执行
3.初始化k8smaster节点
kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=172.17.249.124 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
# 参数解析
--image-repository=registry.aliyuncs.com/google_containers # 将下载容器镜像源替换为阿里云,否则因为网络原因会导致镜像拉不下来,一定会执行不成功。
--cri-socket=unix:///var/run/cri-dockerd.sock # 这是指定容器运行时,因为containerd也是Docker的组件之一,下载Docker会一并将containerd下载下来,在执行初始化时当Kubernetes检测到有多个容器运行时环境,就必须要手动选择一个。这里也可以看出containerd实际上比Docker更轻量得多。
--apiserver-advertise-address=192.168.56.50 # 为API server设置广播地址,这里选择本机的ipv4地址,这里不希望API SERVER设置在其他node上的话就不要改为其他地址。
--pod-network-cidr=10.244.0.0/16 # 指明 pod 网络可以使用的 IP 地址段,暂时不清楚的可以先不管就用这个值。
--service-cidr=10.96.0.0/12 # 为服务的虚拟 IP 地址另外指定 IP 地址段,暂时不清楚的可以先不管就用这个值。
看到这句话表示Kubernetes安装成功
Your Kubernetes control-plane has initialized successfully!
然后执行下面这段代码
# 非root用户请执行
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
# root用户直接执行
$ export KUBECONFIG=/etc/kubernetes/admin.conf # 临时生效,重启后失效,不推荐。
$ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile # 永久生效,执行kubeadm reset后再次init也无需再次执行这条命令
$ source ~/.bash_profile # 执行永久生效命令之后需要source一下使其生效
$ echo $KUBECONFIG # 检测配置是否生效
/etc/kubernetes/admin.conf
4.安装配置网络插件——这里使用flannel
flannel 下载地址
https://github.com/opencontainers/runc/releases
5.worker加入master
- 只在worker执行
#先拷贝配置到node节点
scp /etc/kubernetes/admin.conf 172.17.249.125:/etc/kubernetes/
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
# 使用命令
kubeadm join 172.17.249.124:6443 --token nxz1sb.imldiqlvdsc5w9og --discovery-token-ca-cert-hash sha256:366be39bffcf7acabf71f125364bdcda97b3ee41a88fdb20a3565ea4be17d1ae --cri-socket unix:///var/run/cri-dockerd.sock
# 验证
在master节点
kubectl get node
出现worker节点并且是ready状态表示k8s集群安装完成