赞
踩
- yum update -y
- yum upgrade -y
- #添加yum源
- mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
- curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
- yum -y install wget
- wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
- #安装要使用的插件,基本的命令工具
- yum -y install net-tools lrzsz wget tree vim unzip bash-completion bash-completion-extra ntpdate
- systemctl stop firewalld
- systemctl disable firewalld
- sed -i 's/enforcing/disabled/' /etc/selinux/config
- sed -ri 's/.*swap.*/#&/' /etc/fstab
- swapon -a
- df -h
- # -r 支持扩展正则+ ? () {} |
- # -i:直接修改文件,而不是输出到标准输出。这意味着命令会直接更改 /etc/fstab 文件的内容,而不是仅仅显示更改。
- # 's/.*swap.*/#&/':这是 sed 的命令模式,其中:
- # s:表示替换操作。
- # &:在替换模式中,& 表示匹配的文本(即所有匹配到的 swap 相关的行)。
- # #&:在替换模式中,# 是注释符号,所以 #& 表示将匹配到的行前面添加 #,从而注释掉这些行。
- # step 1: 安装必要的一些系统工具
- yum install -y yum-utils device-mapper-persistent-data lvm2
- # Step 2: 添加软件源信息
- yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- # Step 3
- sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
- # Step 4: 更新并安装Docker-CE
- yum makecache fast
- yum -y install docker-ce
- # Step 4: 开启Docker服务
- systemctl enable --now docker
-
- #添加镜像加速器
- sudo mkdir -p /etc/docker
- sudo tee /etc/docker/daemon.json <<-'EOF'
- {
- "registry-mirrors": ["https://pu7lyu61.mirror.aliyuncs.com"]
- }
- EOF
- sudo systemctl daemon-reload
- sudo systemctl restart docker

主机名 | IP地址 | 节点 |
---|---|---|
k8s-master | 192.168.113.120 | master |
k8s-node1 | 192.168.113.121 | node1 |
k8s-node2 | 192.168.113.122 | node2 |
- #master执行
- ssh-keygen
-
- cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
- scp -rp /root/.ssh/* root@192.168.113.121:/root/.ssh/
- scp -rp /root/.ssh/* root@192.168.113.122:/root/.ssh/
- #master执行
- cat >> /etc/hosts << EOF
- 192.168.113.120 k8s-master
- 192.168.113.121 k8s-node1
- 192.168.113.122 k8s-node2
- EOF
-
- #给每个节点都传一份
- vim host.sh
- for i in `seq 1 2`
- do
- scp /etc/hosts root@k8s-node$i:/etc/hosts
- done
- cat > /etc/sysctl.d/k8s.conf << EOF
- net.bridge.bridge-nf-call-ip6tables = 1
- net.bridge.bridge-nf-call-iptables = 1
- EOF
- sysctl --system
- #我这里安装最新版的k8s相关组件,你可以修改具体的版本号来自定义安装
- cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
- [kubernetes]
- name=Kubernetes
- baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
- enabled=1
- gpgcheck=1
- gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key
- EOF
- setenforce 0
- yum install -y kubelet kubeadm kubectl
- systemctl enable kubelet && systemctl start kubelet
- #添加命令补全
- source /usr/share/bash-completion/bash_completion
- source <(kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包。
- echo "source <(kubectl completion bash)" >> ~/.bashrc # 在您的 bash shell 中永久的添加自动补全
- source ~/.bashrc
- #主机执行脚本
- vim ntp.sh
- for i in `seq 120 122`
- do
- ssh 192.168.113.$i "ntpdate cn.ntp.org.cn"
- done
- #而docker的cri-dockerd默认Cgroup驱动,所以需要修改
- "exec-opts": ["native.cgroupdriver=systemd"]
-
- #修改以后重启docker
- systemctl restart docker
这是cri-dockerd的官方下载渠道:Releases · Mirantis/cri-dockerd · GitHub(新版本基本是已经处理好的rpm,只需要yum安装即可,非常方便)
参考文档:k8s 1.24 及以后版本如何对接 docker_nothing provides fuse-overlayfs >= 0.7 needed by d-CSDN博客
k8s集群搭建教程(使用cri-docker+flannel) | CodeCook (dettry.github.io)
- #apiserver修改成自己的master节点ip
- kubeadm init \
- --apiserver-advertise-address=192.168.113.120 \
- --image-repository=registry.aliyuncs.com/google_containers \
- --kubernetes-version=v1.30.1 \
- --service-cidr=10.96.0.0/12 \
- --pod-network-cidr=10.244.0.0/16 \
- --cri-socket=unix:///var/run/cri-dockerd.sock
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
- 以下是 cp 命令的一些常用选项:
-
- -r 或 --recursive:递归复制,用于连同子目录一起复制目录。
- -i 或 --interactive:交互式模式,在覆盖文件前提示用户。
- -v 或 --verbose:详细模式,显示复制过程中的信息。
- -p 或 --preserve:保留原文件的属性,如修改时间、访问时间、所有者、权限等。
- -u 或 --update:仅当源文件比目标文件新,或者目标文件不存在时,才复制文件。
- ##这是刚刚上面的提示##
- Your Kubernetes control-plane has initialized successfully!
-
- To start using your cluster, you need to run the following as a regular user:
-
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
- Alternatively, if you are the root user, you can run:
-
- export KUBECONFIG=/etc/kubernetes/admin.conf
-
- You should now deploy a pod network to the cluster.
- Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
- https://kubernetes.io/docs/concepts/cluster-administration/addons/
-
- Then you can join any number of worker nodes by running the following on each as root:
-
- kubeadm join 192.168.113.120:6443 --token rpypka.45mndosxyuszktgb \
- --discovery-token-ca-cert-hash sha256:914ada8e868898a477d39a4bdaee4d00a3acf28bc8b31c0147cdc78c84d107d0

因为k8s默认containerd作为容器运行时,所以想要使用cri-dockerd,需要把containerd先停掉,否则,在node节点加入master节点时会报错,提示你有两个容器运行时,要使用哪一个
为什么我不直接去修改kubelet让他选择我的cri容器运行时?因为我找不到配置文件哈哈哈。网上有很多告诉你去修改/etc/sysconfig/kubelet这个kubelet的配置文件,但实际上根本没有这个文件
因为我们在初始化master节点的时候,是给Service和Pod划分过子网的,而K8s不自带网络插件,划分出来的子网又全是虚拟网络,这个时候肯定就没有办法进行通信了,所以我们需要安装相应的网络插件来解决这个问题,你可以选择安装flannel或者calico,甚至其他的各种网络插件,下面介绍使用calico插件
虽然我们节点虽然已经加入到master节点,但是我们没有安装网络插件,集群内部Pod和节点是无法通信的
- #下载calico/fannel网络插件
- curl -O https://docs.tigera.io/archive/v3.25/manifests/calico.yaml
- vim calico.yaml
- #这里修改为pod的所在子网
- kubectl create -f calico.yaml
这是由于node节点上没有admin.conf。出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在“kubeadm int”启动集群的步骤中就生成了/etc/kubernetes/admin.conf,而node节点上是没有这个文件的,也就是系统认为工作节点时不能具有管理节点的权限,所以可以把master节点上的admin.conf拷贝到其他node节点上,这样就能通过认证,也能顺利的使用kubectl命令行工具了
- scp /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes/
- scp /etc/kubernetes/admin.conf root@k8s-node2:/etc/kubernetes/
-
- #添加到环境变量中,否则每次开机重启都会失效
- echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
- source ~/.bash_profile
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。