K8S 使用手册:全面运维指南
目录
K8S 使用手册:全面运维指南
引言
一、K8S 基础概念
1.1 什么是 K8S
1.2 核心组件
1.3 重要对象
二、K8S 环境搭建
2.1 准备工作
2.2 安装 Kubeadm、Kubelet 和 Kubectl
2.3 初始化 Master 节点
2.4 加入 Worker 节点
三、K8S 基本操作
3.1 创建和管理 Pod
3.1.1 创建 Pod
3.1.2 查看 Pod 状态
3.1.3 删除 Pod
3.2 创建和管理 Deployment
3.2.1 创建 Deployment
3.2.2 查看 Deployment 状态
3.2.3 扩展 Deployment
3.2.4 删除 Deployment
3.3 创建和管理 Service
3.3.1 创建 Service
3.3.2 查看 Service 状态
3.3.3 删除 Service
四、K8S 高级操作
4.1 滚动升级
4.1.1 准备新的镜像
4.1.2 更新 Deployment
4.1.3 查看升级状态
4.2 回滚升级
4.3 配置管理
4.3.1 创建 ConfigMap
4.3.2 在 Pod 中使用 ConfigMap
五、K8S 监控与日志
5.1 安装 Prometheus 和 Grafana 进行监控
5.1.1 使用 Helm 安装 Prometheus
5.1.2 安装 Grafana
5.2 查看容器日志
六、K8S 安全管理
6.1 网络策略
6.2 RBAC(基于角色的访问控制)
七、总结
引言
在当今的云计算和容器化技术领域,Kubernetes(简称 K8S)无疑是一颗耀眼的明星。它作为一个开源的容器编排平台,能够自动化地部署、扩展和管理容器化应用程序,极大地提高了应用的部署效率和可维护性。本文将为你提供一份全面的 K8S 使用手册,涵盖从基础概念到实际操作的各个方面,同时包含大量的代码示例和命令,帮助你更好地掌握 K8S 的运维技巧。
一、K8S 基础概念
1.1 什么是 K8S
Kubernetes 是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。它提供了强大的容器编排能力,能够帮助开发者更高效地管理大规模的容器集群。
1.2 核心组件
- API Server:作为 K8S 集群的核心枢纽,负责处理所有的 RESTful 请求,提供集群的管理接口。
- etcd:分布式键值存储系统,用于存储 K8S 集群的所有配置信息和状态数据。
- Controller Manager:负责管理集群中的各种控制器,如节点控制器、副本控制器等,确保集群状态符合预期。
- Scheduler:负责将 Pod 调度到合适的节点上运行。
- Kubelet:运行在每个节点上的代理,负责管理该节点上的 Pod 和容器。
- Kube - proxy:负责实现 K8S 服务的网络代理和负载均衡。
1.3 重要对象
- Pod:K8S 中最小的可部署单元,一个 Pod 可以包含一个或多个紧密相关的容器。
- Deployment:用于定义 Pod 的副本数量和更新策略,实现应用的部署和滚动升级。
- Service:为一组 Pod 提供统一的网络访问入口,实现负载均衡和服务发现。
- Namespace:用于隔离不同的资源,将集群划分为多个虚拟空间。
二、K8S 环境搭建
2.1 准备工作
在搭建 K8S 环境之前,需要准备以下工作:
- 至少 3 台服务器或虚拟机,建议使用 Linux 系统(如 CentOS 7)。
- 确保各节点之间网络连通,并且可以访问外网。
- 安装 Docker 容器运行时。
2.2 安装 Kubeadm、Kubelet 和 Kubectl
在所有节点上执行以下命令安装 Kubeadm、Kubelet 和 Kubectl:
# 添加 K8S 软件源
cat <
2.3 初始化 Master 节点
在 Master 节点上执行以下命令初始化集群:
# 初始化 Master 节点
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
# 安装网络插件(以 Flannel 为例)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.4 加入 Worker 节点
在 Worker 节点上执行以下命令加入集群:
# 在 Master 节点初始化完成后会输出以下类似命令,复制到 Worker 节点执行
sudo kubeadm join : --token --discovery - token - ca - cert - hash
三、K8S 基本操作
3.1 创建和管理 Pod
3.1.1 创建 Pod
创建一个名为 nginx - pod.yaml
的文件,内容如下:
apiVersion: v1
kind: Pod
metadata:
name: nginx - pod
spec:
containers:
- name: nginx - container
image: nginx:1.14.2
ports:
- containerPort: 80
执行以下命令创建 Pod:
kubectl apply -f nginx - pod.yaml
3.1.2 查看 Pod 状态
收起
bash
kubectl get pods
3.1.3 删除 Pod
kubectl delete pod nginx - pod
3.2 创建和管理 Deployment
3.2.1 创建 Deployment
创建一个名为 nginx - deployment.yaml
的文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx - deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx - container
image: nginx:1.14.2
ports:
- containerPort: 80
执行以下命令创建 Deployment:
kubectl apply -f nginx - deployment.yaml
3.2.2 查看 Deployment 状态
kubectl get deployments
3.2.3 扩展 Deployment
kubectl scale deployment nginx - deployment --replicas = 5
3.2.4 删除 Deployment
kubectl delete deployment nginx - deployment
3.3 创建和管理 Service
3.3.1 创建 Service
创建一个名为 nginx - service.yaml
的文件,内容如下:
apiVersion: v1
kind: Service
metadata:
name: nginx - service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
执行以下命令创建 Service:
kubectl apply -f nginx - service.yaml
3.3.2 查看 Service 状态
kubectl get services
3.3.3 删除 Service
kubectl delete service nginx - service
四、K8S 高级操作
4.1 滚动升级
4.1.1 准备新的镜像
假设要将 nginx
镜像从 1.14.2
升级到 1.16.1
。
4.1.2 更新 Deployment
kubectl set image deployment/nginx - deployment nginx - container = nginx:1.16.1
4.1.3 查看升级状态
kubectl rollout status deployment/nginx - deployment
4.2 回滚升级
kubectl rollout undo deployment/nginx - deployment
4.3 配置管理
4.3.1 创建 ConfigMap
创建一个名为 config - map.yaml
的文件,内容如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: my - config - map
data:
config.properties: |
key1 = value1
key2 = value2
执行以下命令创建 ConfigMap:
kubectl apply -f config - map.yaml
4.3.2 在 Pod 中使用 ConfigMap
修改 nginx - pod.yaml
文件,添加 ConfigMap 挂载:
apiVersion: v1
kind: Pod
metadata:
name: nginx - pod
spec:
containers:
- name: nginx - container
image: nginx:1.14.2
ports:
- containerPort: 80
volumeMounts:
- name: config - volume
mountPath: /etc/config
volumes:
- name: config - volume
configMap:
name: my - config - map
重新创建 Pod 使配置生效:
kubectl apply -f nginx - pod.yaml
五、K8S 监控与日志
5.1 安装 Prometheus 和 Grafana 进行监控
5.1.1 使用 Helm 安装 Prometheus
# 添加 Prometheus 仓库
helm repo add prometheus - community https://prometheus - community.github.io/helm - charts
# 安装 Prometheus
helm install prometheus prometheus - community/kube - prometheus - stack
5.1.2 安装 Grafana
# 添加 Grafana 仓库
helm repo add grafana https://grafana.github.io/helm - charts
# 安装 Grafana
helm install grafana grafana/grafana
5.2 查看容器日志
kubectl logs
六、K8S 安全管理
6.1 网络策略
创建一个名为 network - policy.yaml
的文件,内容如下:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: nginx - network - policy
spec:
podSelector:
matchLabels:
app: nginx
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 80
执行以下命令创建网络策略:
kubectl apply -f network - policy.yaml
6.2 RBAC(基于角色的访问控制)
创建一个名为 rbac - role.yaml
的文件,内容如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod - reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
创建 RoleBinding 将角色绑定到用户或组:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read - pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod - reader
apiGroup: rbac.authorization.k8s.io
执行以下命令创建 Role 和 RoleBinding:
kubectl apply -f rbac - role.yaml
kubectl apply -f rbac - role - binding.yaml
七、总结
Kubernetes 作为一个强大的容器编排平台,为我们提供了丰富的功能和工具来管理容器化应用程序。通过本文的介绍,你应该对 K8S 的基础概念、环境搭建、基本操作、高级操作、监控日志以及安全管理等方面有了全面的了解。在实际运维过程中,要不断学习和实践,结合具体的业务场景,充分发挥 K8S 的优势,提高应用的部署效率和可靠性。同时,要密切关注 K8S 的最新版本和特性,及时进行升级和优化,以应对不断变化的业务需求。