DevOps - Kubernetes
Kubernetes 帮助我们自动化部署、扩展和管理容器化应用程序的方式。这使它成为我们在 DevOps 中的重要工具。
在本章中,我们将介绍 Kubernetes 的基础知识。我们将讨论它的架构以及如何设置集群。我们还将讨论如何部署应用程序、管理配置、集成 CI/CD 以及监控策略。
了解 Kubernetes 架构
我们可以将 Kubernetes 架构视为主从设置。它有许多部分可以协同工作以管理容器中的应用程序。主要部分是:
1. 控制平面
- API 服务器 − 这是 Kubernetes 控制平面的前端部分。它处理所有 REST 操作。
- 调度程序 − 这有助于将工作负载分配给节点。它查看可用的资源并遵循某些规则。
- 控制器管理器 − 它管理用于检查集群状态的控制器。例如,它与复制控制器一起工作。
- etcd − 这是一个分布式键值存储。它保存所有集群数据,是主要的事实来源。
2. 工作节点
工作节点运行应用程序。它们有 −
- Kubelet − 这是一个与控制平面对话的代理。它管理容器的生命周期。
- Kube Proxy −这负责服务的网络路由和负载平衡。
- 容器运行时 − 这是运行容器的软件。示例包括 Docker 和 containerd。
3. 网络
Kubernetes 网络帮助 pod 和服务相互通信。它使用:
- 集群 IP − 这是用于访问服务的内部 IP。
- NodePort − 这会在每个节点 IP 上的固定端口上公开服务。
- LoadBalancer − 这与云提供商合作,为服务设置负载均衡器。
我们需要很好地理解这个架构。它帮助我们有效地管理和部署 Kubernetes 中的应用程序。
设置 Kubernetes 集群
我们可以通过几个步骤设置 Kubernetes 集群。我们可以在本地机器、云服务或我们自己的服务器上执行此操作。在这里,我们将展示使用 kubeadm 设置 Kubernetes 集群的步骤。这是启动集群的常用工具。
以下是先决条件 −
- 操作系统 − 我们需要 Ubuntu、CentOS 或其他 Linux 系统。
- 硬件 − 每个节点应至少具有 2 个 CPU 和 2GB RAM。
- Docker −我们必须安装 Docker 并确保它正在运行以管理容器映像。
设置 Kubernetes 集群的步骤
安装 Kubernetes 组件 − 首先,我们运行这些命令 −
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl 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 /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 kubeadm init --pod-network-cidr=192.168.0.0/16
设置本地 Kubeconfig − 我们需要为用户设置 kubeconfig−
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装 Pod 网络插件(如 Calico) − 我们可以使用此命令安装 Calico −
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
加入工作节点 − 对于每个工作节点,我们使用初始化步骤中的令牌 −
kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
验证 − 要检查节点的状态,我们运行 −
kubectl get nodes
此命令向我们显示主节点和工作节点的状态。这样,我们可以确认我们已正确设置了 Kubernetes 集群。
在 Kubernetes 上部署应用程序
我们可以通过使用 Kubernetes 清单定义应用程序的外观,在 Kubernetes 上部署应用程序。我们通常用 YAML 编写这些清单。我们用于部署的最常见资源是 Pod、ReplicaSet 和 Deployments。在本节中,我们将讨论部署的关键步骤 −
创建部署 − 我们需要在部署清单中定义我们的应用程序的外观。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app-image:latest
ports:
- containerPort: 80
应用清单 − 我们使用 kubectl 应用部署 −
kubectl apply -f deploy.yaml
公开应用程序 − 我们创建一个服务以让外部流量到达我们的应用程序。
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: my-app
验证部署 − 我们检查 Pod 和服务的状态 −
kubectl get pods kubectl get services
通过遵循这些步骤,我们可以在 Kubernetes 集群上成功部署和管理应用程序。
管理配置和机密
在 Kubernetes 中,我们看到配置和机密非常重要。它们帮助我们管理应用程序设置并确保敏感数据的安全。Kubernetes 为我们提供了 ConfigMaps 来处理非敏感配置数据。它还为我们提供了密码或 API 密钥等敏感信息的机密。
ConfigMaps
ConfigMaps 将配置设置保存为键值对。我们可以从文件、文件夹或直接值创建 ConfigMap。
kubectl create configmap my-config --from-literal=key1=value1
--from-file=my-config-file.conf
在 Pod 中的使用 − 我们可以将 ConfigMap 作为卷挂载或将其用作环境变量。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
env:
- name: CONFIG_KEY
valueFrom:
configMapKeyRef:
name: my-config
key: key1
Secrets
Secrets 可确保敏感数据的安全。它们以 Base64 编码。我们像 ConfigMaps 一样创建 Secrets,但使用 kubectl create secret 命令。
kubectl create secret generic my-secret --from-literal=password=my-password
在 Pod 中的使用 − Secrets 也可以作为卷安装或用作环境变量。
apiVersion: v1
kind: Pod
metadata:
name: my-secure-pod
spec:
containers:
- name: my-secure-container
image: my-secure-image
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password
使用 Kubernetes 实现 CI/CD 管道
我们知道持续集成 (CI) 和持续部署 (CD) 管道在 DevOps 中非常重要。它们帮助我们自动化应用程序的交付方式。Kubernetes 为我们提供了一个强大的平台来部署、管理和扩展应用程序,从而使 CI/CD 变得更好。
关键组件
- 源代码控制 − 我们使用 Git 存储库来存储应用程序代码。
- CI/CD 工具 − 我们使用的工具包括:Jenkins、GitLab CI 和 ArgoCD。
- 容器注册表 −我们可以使用 Docker Hub 或私有注册表来保存我们的镜像。
CI/CD 流程
代码提交 − 我们将代码更改推送到存储库。
构建阶段 − 我们的 CI 工具构建 Docker 镜像。
docker build -t myapp:latest .
测试阶段 − 运行自动测试来检查我们的代码。
推送到注册表 − 我们将成功的构建推送到容器注册表。
docker push myapp:latest
部署 −我们使用 Kubernetes 清单(YAML 文件)进行部署。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
Kubernetes 上的 CI/CD 工具
- Helm − 它是 Kubernetes 的包管理器。
- Tekton − 这是一个 Kubernetes 原生的 CI/CD 框架。
- ArgoCD − 我们使用这个 GitOps 持续交付工具。
通过将所有这些部分组合在一起,我们可以使 Kubernetes 中的软件部署过程自动化、高效且可靠。
Kubernetes 中的监控和日志记录
我们知道良好的监控和日志记录对于保持 Kubernetes 集群健康且正常运行非常重要。这些工具可以帮助我们发现问题、检查性能并快速解决问题。
监控工具
- Prometheus − 它是一个用于监控和警报的开源工具。它使用 HTTP 上的拉取模型收集数据。它允许我们使用多维数据和灵活的查询。
- Grafana − 这是一个与 Prometheus 配合使用的可视化工具。我们可以创建仪表板来清楚地查看我们的指标。
- Kube-state-metrics − 此工具为我们提供有关 Kubernetes 对象(如部署和 pod)状态的指标。它为我们提供了详细的监控信息。
日志解决方案
- Fluentd −它是一个数据收集器,可帮助我们整合来自不同地方的日志。它帮助我们轻松地从节点和容器收集日志。
- Elasticsearch & Kibana − Elasticsearch 存储日志。Kibana 帮助我们可视化它们。这些工具非常适合搜索和检查日志。
Prometheus 配置示例
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
data:
prometheus.yml: |
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- role: node
结论
在本章中,我们了解了 Kubernetes 的基础知识。我们讨论了它的结构、如何设置集群、部署应用程序、管理配置、集成 CI/CD 以及监控系统。

