Contents

Kubectl 使用指南

Kubectl 命令使用指南

kubectl 是 Kubernetes 集群的命令行工具,用于管理和操控 Kubernetes 资源。以下是一些常用的 kubectl 命令以及高级用法的介绍。

常用命令

基本命令

  • kubectl cluster-info:查看当前连接的集群信息
  • kubectl get nodes:列出集群中的节点
  • kubectl get pods:列出集群中的 Pod
  • kubectl get services:列出集群中的服务

部署和管理

  • kubectl run:创建并运行一个特定的镜像
  • kubectl create:创建资源对象
  • kubectl apply -f:创建/更新资源对象
  • kubectl delete:删除资源对象
  • kubectl edit:编辑资源对象的配置

查看和查询

  • kubectl describe:显示资源对象的详细信息
  • kubectl logs:查看 Pod 的日志
  • kubectl exec:在容器中执行命令
  • kubectl get --watch:监视资源对象的变化
  • kubectl get -o wide:显示更多信息

调整资源

  • kubectl scale:手动扩缩容 Deployment、ReplicaSet、Replication Controller 或 Job
  • kubectl rollout:对 Deployment 进行版本回退或升级
  • kubectl autoscale:自动水平扩缩容 Deployment、ReplicaSet、StatefulSet 或 Job

高级用法

调度策略

Kubernetes 允许您自定义 Pod 调度策略。您可以使用 nodeSelectornodeAffinitypodAffinity 来控制 Pod 在哪些节点上运行,以及 Pod 与其他 Pod 的亲和性。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd
  containers:
  - name: nginx
    image: nginx

资源限制

您可以设置 Pod 容器的资源限制,以防止资源耗尽。同时还可以设置资源请求,以确保容器获得所需的最小资源。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    resources:
      requests:
        cpu: 100m
        memory: 200Mi
      limits:
        cpu: 500m
        memory: 800Mi

健康检查

Kubernetes 支持三种健康检查机制:livenessProbereadinessProbestartupProbe。您可以根据需要配置它们,确保容器的健康状态。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    livenessProbe:
      httpGet:
        path: /healthz
        port: 80
    readinessProbe:
      httpGet:
        path: /readyz
        port: 80

安全上下文

Kubernetes 提供了多种安全上下文设置,例如设置特权模式、设置运行用户、设置能力等。这些设置可以增强容器的安全性。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    securityContext:
      privileged: true
      runAsUser: 1000
      capabilities:
        add: ["NET_ADMIN"]

持久化存储

Kubernetes 支持通过 PersistentVolumePersistentVolumeClaim 来提供持久化存储。这种方式可以实现数据的持久化,避免数据因容器重启而丢失。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

服务发现

Kubernetes 支持多种服务发现机制,例如 ClusterIPNodePortLoadBalancer。这些机制可以实现服务的内部和外部访问。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: LoadBalancer
  ports:
  - port: 80

日志和监控

Kubernetes 支持将日志输出到标准输出,您可以使用 kubectl logs 命令查看。同时,您可以集成第三方日志和监控解决方案,如 Elasticsearch、Fluentd、Prometheus 等,实现更加强大的日志收集和监控功能。

身份认证和授权

Kubernetes 支持多种身份认证和授权机制,例如客户端证书、令牌、基本身份认证等。您可以根据需要配置适当的访问控制策略,保护集群的安全性。

1
2
3
4
5
6
7
8
9
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

自动扩缩容

Kubernetes 支持基于多种指标的自动扩缩容,如 CPU 利用率、内存利用率等。您可以使用 kubectl autoscale 命令或通过编写自定义控制器来实现。这种功能可以根据实际需求动态调整资源,提高资源利用率。

1
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=1 --max=10

配置管理

Kubernetes 支持使用 ConfigMap 和 Secret 来管理配置数据。ConfigMap 用于存储非敏感的配置信息,而 Secret 则用于存储敏感信息,如密码、令牌等。

1
2
3
4
5
6
7
8
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    user  nginx;
    worker_processes  1;    

这些只是 kubectl 的一些常用命令和高级用法。Kubernetes 是一个功能强大的容器编排系统,它还提供了很多其他高级功能,如网络策略、故障恢复、自定义资源等。您可以继续探索并根据需要使用这些功能。