简介
本全面教程旨在帮助你为 Kubernetes 技术面试做好准备。通过掌握本指南中涵盖的基本概念和实践技能,你将有充分的准备自信地应对与 Kubernetes 相关的面试问题,并展示你在这个快速发展领域的专业知识。
本全面教程旨在帮助你为 Kubernetes 技术面试做好准备。通过掌握本指南中涵盖的基本概念和实践技能,你将有充分的准备自信地应对与 Kubernetes 相关的面试问题,并展示你在这个快速发展领域的专业知识。
Kubernetes 是一个开源的容器编排平台,用于自动化容器化应用程序的部署、扩展和管理。它最初由谷歌设计,现在由云原生计算基金会(Cloud Native Computing Foundation,CNCF)维护。
kubeadm
、kubelet
、kubectl
)。kubeadm
初始化 Kubernetes 集群。kubectl
以与 Kubernetes 集群进行交互。## 创建一个部署
kubectl create deployment nginx --image=nginx
## 将部署暴露为服务
kubectl expose deployment nginx --port=80 --type=LoadBalancer
## 扩展部署
kubectl scale deployment nginx --replicas=3
localhost
相互通信。kubeadm:一个用于引导创建最小可行 Kubernetes 集群的工具。
## 初始化控制平面
## 将工作节点加入集群
Minikube:一个用于在本地机器上创建单节点 Kubernetes 集群以进行开发和测试的工具。
## 启动 Minikube 集群
minikube start
kubeadm upgrade:将 Kubernetes 集群升级到新版本。
## 升级控制平面
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.21.0
## 升级工作节点
sudo kubeadm upgrade node
托管 Kubernetes 服务:如 GKE、EKS 和 AKS 等平台会自动处理升级过程。
localhost
相互通信。externalName
字段的内容。入口是一个 API 对象,用于管理对 Kubernetes 集群中服务的外部访问,通常是 HTTP 访问。
## 创建一个入口资源
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
Kubernetes 卷提供了一种存储数据的方式,这些数据在 Pod 的生命周期之外仍然存在。它们可以挂载到 Pod 内的容器中。
持久卷表示集群中的一块存储,独立于 Pod 的生命周期。它们可以由管理员静态配置,也可以使用存储类动态配置。
apiVersion: v1
kind: 持久卷
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/my-pv
持久卷声明请求存储资源,这些资源可以由一个或多个持久卷来满足。
apiVersion: v1
kind: 持久卷声明
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Kubernetes 支持使用存储类对持久卷进行动态配置。这允许持久卷声明自动得到满足,而无需手动创建持久卷。
配置映射用于存储非敏感的配置数据,例如应用程序设置,这些数据可以作为环境变量注入到 Pod 中,或者作为文件挂载。
apiVersion: v1
kind: 配置映射
metadata:
name: app-config
data:
APP_COLOR: blue
APP_ENV: production
密钥用于以安全的方式存储敏感信息,例如密码、API 密钥或证书。
apiVersion: v1
kind: 密钥
metadata:
name: app-secret
type: Opaque
data:
DB_PASSWORD: dXNlcnBhc3N3b3Jk
API_KEY: YXBpa2V5
配置和密钥可以通过以下方式注入到 Pod 中:
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app-container
image: myapp:v1
env:
- name: APP_COLOR
valueFrom:
configMapKeyRef:
name: app-config
key: APP_COLOR
envFrom:
- secretRef:
name: app-secret
volumeMounts:
- name: config
mountPath: /etc/app
volumes:
- name: config
configMap:
name: app-config
Kubernetes 提供了多个内置监控工具,并支持与各种第三方监控解决方案集成。
指标服务器是一个可扩展、高效且基于 RESTful 的 API 服务器,它从集群中的所有节点和 Pod 收集资源使用数据。
## 安装指标服务器
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Prometheus 是一个广受欢迎的开源监控和警报系统,可与 Kubernetes 集成以收集和存储指标。
Kubernetes 支持各种日志记录解决方案,包括与第三方日志管理系统集成。
Kubernetes 支持与集中式日志记录解决方案集成,例如 Elasticsearch、Fluentd 或 Loki,以聚合和管理集群中所有节点和 Pod 的日志。
Kubernetes 支持多种认证方法,包括:
Authorization
头部中出示承载令牌。Kubernetes 使用基于角色的访问控制(RBAC)模型在集群内授权操作。
apiVersion: rbac.authorization.k8s.io/v1
kind: 角色
metadata:
namespace: 默认
name: pod-读取器
rules:
- apiGroups: [""] ## "" 表示核心 API 组
resources: ["pods"]
verbs: ["get", "watch", "list"]
Kubernetes 网络策略允许你控制 Pod 之间以及与外部资源的通信方式。
apiVersion: networking.k8s.io/v1
kind: 网络策略
metadata:
name: 拒绝外部访问
spec:
podSelector:
matchLabels:
app: myapp
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: myapp
准入控制器是拦截对 Kubernetes API 服务器请求的插件,使你能够实施自定义策略和验证。
在本教程中,你将深入了解 Kubernetes 的核心方面,包括其架构、部署、网络、存储、配置、监控和安全。到最后,你将对在下次 Kubernetes 技术面试中脱颖而出所需的基本 Kubernetes 知识和实践技能有扎实的理解。