虚拟机上搭建K8S集群:
零基础搭建k8s集群一次成功,坑太多我都替你踩过了(文档) (qq.com)
Ubuntu 22安装K8S 1.26实战 - 掘金 (juejin.cn)
配置ubuntu系统国内源
为了避免遭遇科学上网的问题,我们需要配置一下国内的源;
备份默认源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo rm -rf /etc/apt/sources.list
配置国内源
sudo vi /etc/apt/sources.list
配置国内源即可:
ubuntu换镜像源(ubuntu换源)_乌班图镜像源_Fighting_1997的博客-CSDN博客
1.创建虚拟机
关闭swap分区 sudo swapoff -a
永久禁用 sudo vi /etc/fstab
将最后一行注释后重启系统即生效
#/swap.img none swap sw 0 0
关闭防火墙 sudo ufw status
sudo ufw disable
2安装docker
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
配置阿里云镜像源
需要登陆阿里云:阿里云登录页 (aliyun.com)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hhydrthc.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo apt install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
sudo docker –version
3安装kubeadm(每台机器都得装)
构建一个脚本,vim installAdn.sh ,然后执行 sh installAdn.sh
#!/bin/bash
apt update && apt install apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
apt-get update
apt-cache madison kubelet kubectl kubeadm |grep '1.22.7-00'
apt install -y kubelet=1.22.7-00 kubectl=1.22.7-00 kubeadm=1.22.7-00
4禁用swap
vim /etc/default/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
systemctl daemon-reload && systemctl restart kubelet
5 在master节点进行初始化
kubeadm init \
--kubernetes-version=v1.22.7 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.24.0.0/16 \
--ignore-preflight-errors=Swap
pod-network-cidr 这个是自定义资源,pod网段不要与主机名相同
初始化成功后执行打印信息的命令
并记住工作节点的加入命令
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.30.136:6443 --token 1ya3u9.pq6ndx5rmin464cn \
--discovery-token-ca-cert-hash sha256:9ad7086cb1a99d942861e060956d6d0b70ec02d8996e495416cc2b8c16a778f5
6安装Calico CNI插件
安装Calico CNI插件:使用kubectl安装Calico CNI插件。阿里云的镜像仓库通常包含Calico的镜像,因此可以直接使用官方提供的YAML文件来安装
kubectl apply -f https://docs.projectcalico.org/v3.22/manifests/calico.yaml
等待Calico插件的部署完成,可以使用以下命令检查Calico相关的Pod是否在运行:
kubectl get pods -n kube-system | grep calico
也可以安装指示面板
7 工作节点配置kubectl
要将 master 节点上的 Kubernetes 配置文件 admin.conf
复制到从节点的相同目录下
scp xiao@master:/etc/kubernetes/admin.conf /etc/kubernetes/
这将从 master
节点上的 admin.conf
文件复制到目标节点(从节点)上的 /etc/kubernetes/
目录中。
实现上面确保 master
节点上的 SSH 服务正在运行
sudo systemctl status ssh
没有就安装sudo apt-get install openssh-server
如果还是没有权限,那就是主机不允许其他用户访问这个文件,那就修改权限
sudo chmod 644 /etc/kubernetes/admin.conf
然后配置mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
就可以在工作节点上使用kubectl
8 修改主节点,可以调度pod在主节点上运行
kubectl describe nodes master | grep -E '(Taints|Roles)' 查看主节点的taints,应该是不允许调度
kubectl taint nodes master node-role.kubernetes.io/master-
这将删除掉主节点上的 Taints,允许普通工作负载的 Pod 调度到主节点上。
除了上面的修改,我们也可以给主节点一个worker标签, 将其标记为工作节点。
kubectl label nodes master node-role.kubernetes.io/worker=
现在,您可以创建 Pod,而不必删除主节点上的 Taints。Pod 将会根据节点的标签和调度策略,随机调度到工作节点和主节点上。
我两个都做了,这两个命令不会改变主节点的角色,它们只会修改节点的 Taints 和标签,以影响 Pod 的调度行为和为节点添加附加信息。