基于Docker部署Kubernetes 学习环境架构搭建 创建VPC 在AWS创建一个拥有一个子网的VPC
创建安全组 安全组为了方便最好把ssh的22端口以及Kubernetes API服务的端口6443设置为入站规则。
启动模板创建 根据最小配置。
编写用户数据。
#!/bin/bash apt-get update apt-get install -y docker.io systemctl start docker systemctl enable docker curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.listapt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl swapoff -a sed -i '/ swap / s/^/#/' /etc/fstab
问题来了,当我试图用用户数据来做启动后的自动安装配置,由于Ubuntu版本命令已经不用apt-key了,所以在实例启动后并没有得到相应的环境,不过没有问题。
Master主节点 配置主节点环境以及准备初始化主节点 1. 安装docker sudo apt-get update sudo apt-get install docker.io -y sudo systemctl enable --now docker
2.关闭Swap
3.安装 cri-dockerd wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd_0.3.4.3-0.ubuntu-jammy_amd64.deb dpkg -i cri-dockerd_0.3.4.3-0.ubuntu-jammy_amd64.deb
4.启动并配置开机启动 cri-dockerd sudo systemctl enable --now cri-docker.service sudo systemctl enable --now cri-docker.socket
这些命令设置cri-docker
服务和socket的启动和开机自启动,确保Kubernetes可以正确与Docker通信。
5.安装 kubeadm、kubelet、kubectl sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] http://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
sudo docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.27.4 sudo docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.27.4 sudo docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.27.4 sudo docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.27.4 sudo docker pull registry.aliyuncs.com/google_containers/pause:3.9 sudo docker pull registry.aliyuncs.com/google_containers/etcd:3.5.7-0 sudo docker pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
第一次尝试初始化 粗心大意,podSubnet没有注意大小写
第二次尝试初始化 需要reset一下kubeeadm
sudo kubeadm reset -f --cri-socket unix:///run/cri-dockerd.sock
验证 出现了两个问题,总的来说就是权限问题和连接问题.
权限问题解决 sudo chown ubuntu:ubuntu /etc/kubernetes/admin.conf
解决完权限问题后,连接问题也解决了
经过一定的搜寻和思考,
运行上述命令后,你实际上是在改变 /etc/kubernetes/admin.conf
文件的所有权,将其从 root
用户和组更改为 ubuntu
用户和组。这样做的直接结果是,普通用户 ubuntu
现在有权限读取这个文件。
在k8s中集群中,admin.conf
文件包含了连接到集群的 K8s API 服务器的必要凭证和连接信息。这包括 API 服务器的地址、端口、使用的证书等。当你以 ubuntu
用户身份运行 kubectl
命令时,kubectl
会尝试读取这个配置文件来获取连接到 K8s 集群的必要信息。
先观察一下kubelet日志 sudo journalctl -u kubelet -f
再看一眼pod的日志 sudo kubectl logs coredns-5dd5756b68-jd25s --namespace=kube-system
这种情况,大概率是网络上的,问题,经过查找需要安装一些网络插件
安装部署 Calico 网络插件 kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
Node 节点加入集群 先在master节点查看加入命令 sudo kubeadm token create --print-join-command
kubeadm join 10.0.1.237:6443 --token a69ewm.uvje3ei8zhox3xar --discovery-token-ca-cert-hash sha256:64db0e4e2ddc13e1a06390ac6b90b4f38a965fdc7cbfd2e3baa80a668e7cd74d --cri-socket unix:///run/cri-dockerd.sock
为了node节点加入必备组件 成功后会显示
然后主节点查看加入集群的节点
ps:如果报couldn’t get current server API group list: Get “http://localhost:8080/api?timeout=32s" : dial tcp 127.0.0.1:8080: connect: connection refused的话,大概率是终端断连导致之前export的环境变量失效了,可以在/etc/environment文件中加入KUBECONFIG=”/etc/kubernetes/admin.conf”以使环境变量永久生效