Docker与Kubernetes完全掌握第7篇:Kubernetes安装与集群配置
Docker & Kubernetes Complete Guide Part 7: Kubernetes Installation and Cluster Configuration
前言:Kubernetes环境构建的开始
学习和使用Kubernetes的第一步是构建合适的环境。根据开发目的、测试环境、生产部署等使用目的,存在多种安装选项。在本第7篇中,我们将介绍从本地开发环境到云托管服务,再到直接构建集群的方法,涵盖Kubernetes环境配置所需的一切。
1. 本地开发环境
本地开发环境最适合学习Kubernetes或开发和测试应用程序。无需额外的云成本,即可在自己的计算机上运行Kubernetes集群。
1.1 Minikube
Minikube是在本地运行单节点Kubernetes集群的最流行工具。它支持多种虚拟化驱动程序,可以在本地测试大多数Kubernetes功能。
主要特点:
- 支持多种驱动程序(Docker、VirtualBox、Hyper-V、KVM等)
- 通过Addons扩展功能(Ingress、Dashboard、Metrics Server等)
- 支持多节点集群模拟
- 可选择多种Kubernetes版本
1.2 Kind (Kubernetes in Docker)
Kind使用Docker容器作为节点来运行本地Kubernetes集群。它在CI/CD环境中特别有用,可以轻松配置多节点集群。
主要特点:
- 只需Docker即可运行
- 快速创建和删除集群
- 易于配置多节点集群
- 适合CI/CD流水线
1.3 Docker Desktop
Docker Desktop是一个集成解决方案,允许在Windows和macOS上同时使用Docker和Kubernetes。只需在设置中启用Kubernetes即可立即使用。
主要特点:
- 安装和设置简单
- Docker和Kubernetes集成环境
- 通过GUI轻松管理
- 支持自动更新
2. 云托管服务
在生产环境中,通常使用云提供商的托管Kubernetes服务。这些服务由云提供商负责控制平面管理,可以大大减少运营负担。
2.1 Amazon EKS (Elastic Kubernetes Service)
AWS提供的托管Kubernetes服务。与AWS的各种服务紧密集成。
主要特点:
- 与AWS IAM集成的身份验证/授权
- 与ELB、EBS、VPC等AWS服务原生集成
- 通过Fargate实现无服务器容器运行
- 利用AWS全球基础设施
2.2 Google GKE (Google Kubernetes Engine)
由创建Kubernetes的Google提供的托管服务。是最成熟的托管Kubernetes服务之一。
主要特点:
- Autopilot模式实现完全托管运营
- 自动升级和恢复
- 与GCP服务紧密集成
- 通过Anthos支持多云
2.3 Azure AKS (Azure Kubernetes Service)
Microsoft Azure提供的托管Kubernetes服务。与Azure生态系统完美集成。
主要特点:
- Azure Active Directory集成
- 与Azure DevOps联动
- 通过Azure Monitor进行监控
- 支持Windows容器
3. 使用kubeadm构建集群
kubeadm是Kubernetes官方提供的集群引导工具。用于在裸机服务器或VM上构建生产级集群。
3.1 前置要求
- Linux服务器(Ubuntu、CentOS等)
- 最少2GB RAM,2个CPU
- 网络连接(各节点间可通信)
- 禁用swap
- 容器运行时(containerd、CRI-O等)
3.2 安装步骤
1. 安装容器运行时(containerd示例):
# 安装必需包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 安装containerd
sudo apt-get install -y containerd
# containerd配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
2. 安装kubeadm、kubelet、kubectl:
# 添加Kubernetes apt仓库
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | 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
3. 初始化集群(在主节点上):
# 初始化集群
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# kubectl配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. 安装CNI网络插件(Flannel示例):
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
5. 工作节点加入:
# 使用在主节点上生成的加入命令
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
4. Minikube安装和使用方法
让我们详细了解最容易上手的Minikube。
4.1 安装
Windows (PowerShell):
# 使用Chocolatey
choco install minikube
# 或直接下载
New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force
Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe'
$oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine)
[Environment]::SetEnvironmentVariable('Path', "$oldPath;C:\minikube", [EnvironmentVariableTarget]::Machine)
macOS:
# 使用Homebrew
brew install minikube
# 或直接下载
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr/local/bin/minikube
Linux:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
4.2 基本使用方法
# 启动集群
minikube start
# 使用特定驱动程序启动
minikube start --driver=docker
# 使用特定Kubernetes版本启动
minikube start --kubernetes-version=v1.29.0
# 指定资源
minikube start --cpus=4 --memory=8192
# 检查集群状态
minikube status
# 停止集群
minikube stop
# 删除集群
minikube delete
# 打开Kubernetes仪表板
minikube dashboard
# Addons管理
minikube addons list
minikube addons enable ingress
minikube addons enable metrics-server
5. kubectl安装和配置
kubectl是管理Kubernetes集群的命令行工具。几乎所有Kubernetes操作都使用它。
5.1 安装
Windows:
# 使用Chocolatey
choco install kubernetes-cli
# 或直接下载
curl.exe -LO "https://dl.k8s.io/release/v1.29.0/bin/windows/amd64/kubectl.exe"
macOS:
# 使用Homebrew
brew install kubectl
# 或直接下载
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
Linux:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
5.2 自动补全设置
# Bash
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
# Zsh
echo 'source <(kubectl completion zsh)' >> ~/.zshrc
source ~/.zshrc
# 别名设置
echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -F __start_kubectl k' >> ~/.bashrc
6. 理解kubeconfig文件
kubeconfig文件包含kubectl连接集群所需的配置。默认位置是~/.kube/config。
6.1 kubeconfig结构
apiVersion: v1
kind: Config
current-context: my-cluster
# 集群信息
clusters:
- name: my-cluster
cluster:
server: https://192.168.1.100:6443
certificate-authority-data: LS0tLS1...
# 用户认证信息
users:
- name: admin
user:
client-certificate-data: LS0tLS1...
client-key-data: LS0tLS1...
# 上下文(集群 + 用户 + 命名空间的组合)
contexts:
- name: my-cluster
context:
cluster: my-cluster
user: admin
namespace: default
6.2 上下文管理
# 查看当前上下文
kubectl config current-context
# 可用上下文列表
kubectl config get-contexts
# 切换上下文
kubectl config use-context my-other-cluster
# 创建新上下文
kubectl config set-context my-context --cluster=my-cluster --user=admin --namespace=my-namespace
# 合并多个kubeconfig文件
export KUBECONFIG=~/.kube/config:~/.kube/config-cluster2
kubectl config view --merge --flatten > ~/.kube/merged-config
7. 检查集群状态
了解确认集群正常运行的各种方法。
7.1 基本状态检查命令
# 集群信息
kubectl cluster-info
# 节点列表和状态
kubectl get nodes
kubectl get nodes -o wide
# 详细节点信息
kubectl describe node <node-name>
# 组件状态检查
kubectl get componentstatuses
# 查看所有命名空间的Pod
kubectl get pods --all-namespaces
# 查看系统Pod
kubectl get pods -n kube-system
7.2 资源使用量检查
# 节点资源使用量(需要metrics-server)
kubectl top nodes
# Pod资源使用量
kubectl top pods
# 特定命名空间的Pod资源使用量
kubectl top pods -n my-namespace
8. 命名空间管理
命名空间是在集群内逻辑分离资源的方法。可以按团队、环境(dev、staging、prod)或项目隔离资源。
8.1 默认命名空间
default:未指定命名空间时使用的默认命名空间kube-system:Kubernetes系统组件运行的命名空间kube-public:所有用户可读取的公共资源kube-node-lease:用于节点心跳的命名空间
8.2 命名空间管理命令
# 命名空间列表
kubectl get namespaces
kubectl get ns
# 创建命名空间
kubectl create namespace my-namespace
# 使用YAML创建
kubectl apply -f - <<EOF
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
labels:
environment: development
EOF
# 删除命名空间(内部资源也会被删除)
kubectl delete namespace my-namespace
# 在特定命名空间中操作
kubectl get pods -n my-namespace
kubectl create deployment nginx --image=nginx -n my-namespace
# 更改默认命名空间
kubectl config set-context --current --namespace=my-namespace
8.3 命名空间资源配额
# resource-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-quota
namespace: my-namespace
spec:
hard:
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "8"
limits.memory: 16Gi
pods: "20"
services: "10"
# 应用资源配额
kubectl apply -f resource-quota.yaml
# 查看资源配额
kubectl describe resourcequota my-quota -n my-namespace
结论
在本第7篇中,我们介绍了构建Kubernetes环境所需的各种方法。在本地开发环境中,可以使用Minikube或Kind快速入门;在生产环境中,可以通过云托管服务或kubeadm构建稳定的集群。
熟悉kubectl和kubeconfig的使用方法,理解集群状态检查和命名空间管理方法,就能奠定Kubernetes运维的基础。在下一篇第8篇中,我们将详细介绍Kubernetes的核心资源:Pod、Deployment和Service。