赞
踩
在Ubuntu上从头开始搭建Kubernetes(K8s)集群需要进行几个步骤,包括安装必要的软件、配置集群节点、初始化主节点和添加工作节点。以下是详细的步骤:
确保所有节点都运行相同版本的Ubuntu,推荐使用Ubuntu 20.04或更新版本。并且确保所有节点都有互联网连接。
在所有节点上更新系统并安装必要的软件包:
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y apt-transport-https ca-certificates curl
Kubernetes要求禁用交换分区。可以通过编辑/etc/fstab
文件来永久禁用交换分区:
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
Notes: 交换分区是什么,以及为什么要禁用交换分区,见下面QA章节
Kubernetes需要容器运行时,这里使用Docker:
sudo apt-get install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
简单验证,docker是否安装成功
docker --version
sudo systemctl status docker
Notes: 更多docker验证,见下面QA章节
添加Kubernetes的APT源,并安装kubeadm、kubelet和kubectl:
sudo su -c "echo 'deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main' > /etc/apt/sources.list.d/kubernetes.list"
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
注意这里使用的是阿里云的APT源。
在主节点上运行以下命令来初始化Kubernetes集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
执行完上述命令后,会输出一段kubeadm join命令,稍后需要在工作节点上使用。
Notes: 关于
--pod-network-cidr=10.244.0.0/16
参数的解释,见下面QA章节
!!!!卡在这里出错了,没办法继续进行!!!!
出错信息:
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed.
之后再搞吧。
将Kubernetes配置文件复制到普通用户目录下,以便使用kubectl命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
为了让Pods能够相互通信,需要部署一个网络插件。这里使用Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
在每个工作节点上运行第6步输出的kubeadm join命令,例如:
sudo kubeadm join <master-node-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
在主节点上验证集群状态:
kubectl get nodes
所有节点应该都显示为Ready
状态。
创建一个简单的Pod来验证集群是否正常工作:
kubectl run nginx --image=nginx --port=80
kubectl get pods
如果Pod状态为Running
,则表示集群搭建成功。
通过以上步骤,您已经在Ubuntu上成功搭建了一个Kubernetes集群。如果有任何问题,请随时提出!
交换分区(Swap Partition)是一种用于虚拟内存的硬盘分区,它可以帮助操作系统管理内存资源。当物理内存(RAM)不足时,操作系统会将不常用的数据从内存转移到交换分区,从而释放更多的物理内存供当前活跃的应用程序使用。
交换分区的作用
交换分区的工作原理
当操作系统检测到物理内存不足时,它会将不活跃的内存页移到交换分区。这些内存页被存储在硬盘上,硬盘访问速度相对于RAM较慢,所以频繁使用交换分区会导致性能下降。当这些内存页再次需要时,操作系统会将它们从交换分区移回到物理内存中。
在Linux中查看和管理交换分区
swapon --show
sudo swapoff -a
/etc/fstab
文件,注释掉有关交换分区的行,以防止系统重启后再次启用交换分区:sudo nano /etc/fstab
# 找到包含 "swap" 的行,并在前面添加 # 注释掉它,例如:
# /swapfile swap swap defaults 0 0
保存并退出后,交换分区将在系统重启后保持禁用状态。
Kubernetes设计的假设是节点上的内存资源是有限的,并且它会精确地调度和管理Pod及其容器的资源。如果启用了交换分区,当物理内存不足时,系统可能会将一些内存页移到交换分区,这可能会导致性能不稳定,甚至在极端情况下导致节点崩溃。为确保Kubernetes集群的稳定性和性能,一般要求禁用交换分区。
1. 检查Docker版本
首先,检查Docker的版本以确保它已正确安装:
docker --version
正常输出示例:
Docker version 20.10.12, build e91ed57
2. 检查Docker服务状态
验证Docker服务是否已启动并正在运行:
sudo systemctl status docker
正常输出示例(部分):
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-05-17 12:34:56 UTC; 10min ago
Docs: https://docs.docker.com
Main PID: 1234 (dockerd)
Tasks: 8
Memory: 25.3M
CGroup: /system.slice/docker.service
└─1234 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
3. 运行测试容器
通过运行一个简单的测试容器来验证Docker是否正常工作,例如运行hello-world
镜像:
sudo docker run hello-world
正常输出示例:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:...
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
4. 检查运行中的容器
验证刚刚运行的hello-world
容器的状态:
sudo docker ps -a
正常输出示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4a93b8a8d23 hello-world "/hello" 5 seconds ago Exited (0) 3 seconds ago amazing_bhaskara
5. 检查Docker信息
获取Docker的详细信息,包括系统信息和配置:
sudo docker info
正常输出示例(部分):
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 20.10.12
Storage Driver: overlay2
...
--pod-network-cidr=10.244.0.0/16
参数的解释在命令 sudo kubeadm init --pod-network-cidr=10.244.0.0/16
中,--pod-network-cidr
参数指定了Kubernetes集群中Pod网络的CIDR(Classless Inter-Domain Routing,无类别域间路由)。具体来说,10.244.0.0/16
是为集群中的Pods分配的IP地址范围。
解释 10.244.0.0/16
的含义
为什么需要指定 --pod-network-cidr
在Kubernetes集群中,每个Pod需要一个唯一的IP地址,这些IP地址不能与集群节点的IP地址冲突。--pod-network-cidr
参数用于定义Pod IP地址的范围,以便网络插件(如Flannel、Calico等)根据这个范围配置网络。
选择适当的 --pod-network-cidr
不同的网络插件可能有不同的默认IP范围要求:
10.244.0.0/16
作为默认值。192.168.0.0/16
作为默认值,但也可以根据需要调整。10.32.0.0/12
作为默认值。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。