引言

Kubernetes(简称K8s)作为现代云原生应用的核心编排和管理工具,其单机配置对于学习和实践来说至关重要。本文将详细讲解K8s单机配置的步骤、实操技巧以及常见问题的应对方法,帮助您轻松构建高效集群。

单机配置步骤

1. 环境准备

在进行单机配置之前,您需要确保以下环境:

  • 操作系统:推荐使用Ubuntu 16.04或更高版本
  • 虚拟化软件:如VirtualBox或VMware
  • 网络环境:能够访问外网,以便下载K8s组件

2. 安装Docker

K8s依赖于Docker容器引擎,因此首先需要安装Docker。

# 安装Docker
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

3. 安装K8s组件

使用kubeadm命令行工具可以简化K8s集群的安装过程。

# 安装kubeadm、kubelet和kubectl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo systemctl start kubelet
sudo systemctl enable kubelet

4. 初始化K8s集群

在主节点上执行以下命令进行初始化。

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

初始化完成后,您需要将主节点的kubeadm join命令保存到/etc/kubernetes/kubeadm-join.sh文件中,并在其他节点上执行该命令以加入集群。

5. 安装网络插件

为了实现Pod之间的通信,需要安装网络插件。本文以Flannel为例。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

实操技巧

1. 使用kubeadm join加入节点

在添加新的节点到集群时,可以使用以下命令:

sudo kubeadm join <集群IP>:<端口> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

2. 使用kubeadm upgrade升级集群

集群升级时,可以使用以下命令:

sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.23.0

3. 使用kubectl管理集群

使用kubectl命令行工具可以轻松管理集群中的资源,例如:

# 查看集群状态
kubectl get nodes

# 创建Pod
kubectl run nginx --image=nginx

# 查看Pod状态
kubectl get pods

常见问题及解决方案

1. Pod无法启动

问题:Pod处于ErrorCrashLoopBackOff状态。

解决方案

  • 查看Pod事件:kubectl describe pod <pod-name>
  • 查看Pod日志:kubectl logs <pod-name>
  • 检查Pod配置是否正确,如资源限制、环境变量等。

2. 证书问题

问题:K8s集群证书过期或无效。

解决方案

  • 使用openssl命令检查证书有效期:openssl x509 -in <certificate-file> -text -noout
  • 检查kube-apiserver日志:kubectl logs -n kube-system kube-apiserver-<node-name>

总结

通过以上步骤,您已经可以成功配置K8s单机集群,并掌握了相关实操技巧和常见问题应对方法。在实际操作中,不断积累经验,才能更好地发挥K8s集群的优势。