极简面试题 --- Kubernetes

什么是 Kubernetes?

Kubernetes是一个开源的容器编排平台,可以自动化部署、扩展和管理应用程序容器。

Kubernetes中的Pod是什么?

Pod是Kubernetes中最小的可部署单元,它由一个或多个容器组成,并共享网络命名空间和存储卷。Pod提供了一种抽象层,使得可以将多个容器作为单个逻辑单元进行管理。

如何创建一个Pod?

可以使用kubectl create或kubectl apply命令来创建Pod。例如:

kubectl create -f pod.yaml

Kubernetes中的Deployment是什么?

Deployment是Kubernetes中用于管理Pod副本集的控制器。它允许定义期望的状态,并确保集群中运行的Pod数量与所需状态匹配。

如何创建一个Deployment?

可以使用kubectl create或kubectl apply命令来创建Deployment。例如:

kubectl create -f deployment.yaml

Kubernetes中的Service是什么?

Service是一种抽象,用于将后端Pod暴露给其他部分。它为Pod提供了稳定的IP地址和DNS名称,并支持负载均衡和服务发现。

Service有哪些类型?

Service有四种类型:ClusterIP、NodePort、LoadBalancer和ExternalName。

如何创建一个Service?

可以使用kubectl create或kubectl apply命令来创建Service。例如:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP
kubectl create -f service.yaml

Kubernetes中的命名空间是什么?

命名空间是一种用于将资源分组的机制。它可以帮助用户管理集群中的多个团队或项目,并提供隔离和访问控制。

如何创建一个命名空间?

可以使用kubectl create或kubectl apply命令来创建命名空间。例如:

kubectl create namespace my-namespace

如何列出所有的Pod?

可以使用kubectl get命令来列出所有的Pod。例如:

kubectl get pods

如何列出指定命名空间中的所有Pod?

可以使用kubectl get命令,并通过-n选项指定要列出的命名空间。例如:

kubectl get pods -n my-namespace

如何获取Pod的详细信息?

可以使用kubectl describe命令来获取Pod的详细信息。例如:

kubectl describe pod my-pod

如何删除一个Deployment?

可以使用kubectl delete命令来删除一个Deployment。例如:

kubectl delete deployment my-deployment

如何扩展一个Deployment中的Pod数量?

可以使用kubectl scale命令来扩展一个Deployment中的Pod数量。例如:

kubectl scale deployment my-deployment --replicas=3

如何更新一个Deployment中的镜像版本?

可以使用kubectl set image命令来更新一个Deployment中的镜像版本。例如:

kubectl set image deployment/my-deployment my-container=my-image:v2

如何暂停一个Deployment中的副本集更新?

可以使用kubectl rollout pause命令来暂停一个Deployment中的副本集更新。例如:

kubectl rollout pause deployment/my-deployment

如何恢复一个Deployment中的副本集更新?

可以使用kubectl rollout resume命令来恢复一个Deployment中的副本集更新。例如:

kubectl rollout resume deployment/my-deployment

如何回滚一个Deployment?

可以使用kubectl rollout undo命令来回滚一个Deployment。例如:

kubectl rollout undo deployment/my-deployment

如何列出所有的Service?

可以使用kubectl get命令来列出所有的Service。例如:

kubectl get services

如何列出指定命名空间中的所有Service?

可以使用kubectl get命令,并通过-n选项指定要列出的命名空间。例如:

kubectl get services -n my-namespace

如何获取Service的详细信息?

可以使用kubectl describe命令来获取Service的详细信息。例如:

kubectl describe service my-service

如何删除一个Service?

可以使用kubectl delete命令来删除一个Service。例如:

kubectl delete service my-service

Kubernetes中的配置映射(ConfigMap)是什么?

ConfigMap是一种用于存储非机密数据的Kubernetes对象,例如配置文件、环境变量等。它们可以简化应用程序配置管理,并将配置与应用程序分离。

如何创建一个ConfigMap?

可以使用kubectl create或kubectl apply命令来创建ConfigMap。例如:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  config.ini: |
    [database]
    host = db.example.com
    username = myuser
    password = mypassword

kubectl create configmap my-config --from-literal=foo=bar

Kubernetes中的密钥(Secret)是什么?

Secret是一种用于存储机密数据的Kubernetes对象,例如密码、API密钥等。它们以加密方式保存在etcd中,并且只有授权用户才能访问。

如何创建一个Secret?

可以使用kubectl create或kubectl apply命令来创建Secret。例如:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: bXl1c2Vy
  password: bXlwYXNzd29yZA==

kubectl create secret generic my-secret --from-literal=password=abc123

Kubernetes中的StatefulSet是什么?

StatefulSet是Kubernetes中用于管理有状态应用程序的控制器。与Deployment不同,它确保Pod的唯一标识性,并按顺序创建和删除Pod。

如何创建一个StatefulSet?

可以使用kubectl create或kubectl apply命令来创建StatefulSet。例如:

kubectl create -f statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset
spec:
  serviceName: my-service
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

  • serviceName:指定要创建的Service的名称。
  • replicas:指定要创建的Pod副本数量。
  • selector:选择将由此StatefulSet控制和管理的Pod的标签。
  • template:定义了每个Pod的规范。在这个示例中,它包含了一个名为my-container的容器,该容器映像名为my-image,并公开了8080端口。
  • volumeClaimTemplates:定义了将用于每个Pod的持久化存储卷的模板。在这个示例中,它使用ReadWriteOnce访问模式请求1Gi存储,挂载到/data目录。

Kubernetes中的DaemonSet是什么?

DaemonSet是用于在集群中运行一个Pod副本的控制器,以确保在每个节点上都有一个实例运行。它们通常用于监视宿主机资源,例如日志收集、监视等。

如何创建一个DaemonSet?

可以使用kubectl create或kubectl apply命令来创建DaemonSet。例如:

kubectl create -f daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-daemonset
spec:
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image
        ports:
        - containerPort: 8080

Kubernetes中的Horizontal Pod Autoscaler是什么?

Horizontal Pod Autoscaler(HPA)是一种能够自动调整Pod副本数量的控制器。它可以根据CPU利用率等指标自动扩展和缩减Pod副本数量。

如何创建一个Horizontal Pod Autoscaler?

可以使用kubectl autoscale命令来创建一个Horizontal Pod Autoscaler。例如:

kubectl autoscale deployment my-deployment --min=2 --max=5 --cpu-percent=80

Kubernetes中的Volume是什么?

Volume是一种抽象概念,用于将存储卷挂载到容器中。它可以将数据从一个Pod容器传递到另一个Pod容器,并支持持久化存储。

Kubernetes中的Persistent Volume是什么?

Persistent Volume(PV)是一种用于在多个Pod之间共享和持久化存储的Kubernetes对象。它可以捆绑到物理存储或云存储服务上。

如何创建一个Persistent Volume?

可以使用kubectl create或kubectl apply命令来创建Persistent Volume。例如:

kubectl create -f pv.yaml

Kubernetes中的Storage Class是什么?

Storage Class是一种抽象概念,用于定义动态存储卷的属性。它可以在Kubernetes集群中动态地创建Persistent Volume。

如何创建一个Storage Class?

可以使用kubectl create或kubectl apply命令来创建Storage Class。例如:

kubectl create -f storageclass.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data

  • capacity:指定要分配给该PV的存储容量。
  • accessModes:指定访问模式,
    • 例如ReadWriteOnce(可以由单个节点写入)
    • ReadOnlyMany(可以由多个节点进行只读访问)。
  • hostPath:指定底层存储在主机上的路径,这将成为可用于Pod中挂载数据卷的持久卷。

Kubernetes中的Ingress是什么?

Ingress是一种用于将外部流量路由到Kubernetes集群内部服务的方法。它可以根据主机名、URL路径等规则进行路由。

如何创建一个Ingress?

可以使用kubectl create或kubectl apply命令来创建Ingress。例如:

kubectl create -f ingress.yaml

Kubernetes中的Network Policy是什么?

Network Policy是一种用于定义网络流量策略的Kubernetes对象。它可以控制Pod之间的流量,实现安全和隔离。

如何创建一个Network Policy?

可以使用kubectl create或kubectl apply命令来创建Network Policy。例如:

kubectl create -f networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: my-domain.com
      http:
        paths:
          - path: /app
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  name: http

  • rules:指定应用于此Ingress的流量规则。在本例中,它将所有来自my-domain.com的流量路由到名为my-service的Service上。
  • annotations:指定与此Ingress相关联的注释。在本例中,使用nginx.ingress.kubernetes.io/rewrite-target注释修改请求URI路径,以便所有请求都指向后端Service的根路径。
  • path:指定Ingress应用于的URL路径。
  • pathType:指定Ingress如何匹配路径。在本例中,Prefix表示应将所有具有/app前缀的路径视为匹配项。

Kubernetes中的Service Account是什么?

Service Account是一种用于管理Pod身份验证和访问控制的Kubernetes对象。它可以为Pod提供一组凭证,以便它们可以与其他服务进行通信。

如何创建一个Service Account?

可以使用kubectl create或kubectl apply命令来创建Service Account。例如:

kubectl create serviceaccount my-serviceaccount

Kubernetes中的Role是什么?

Role是一种用于定义用户对Kubernetes资源的访问权限的Kubernetes对象。它可以控制用户对Pod、Service、ConfigMap等资源的访问。

如何创建一个Role?

可以使用kubectl create或kubectl apply命令来创建Role。例如:

kubectl create -f role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: my-role
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

  • apiGroups:指定要授权的API组。在这个示例中,使用空字符串表示核心API组。
  • resources:指定要授权的Kubernetes资源类型,例如Pod、Service等。
  • verbs:指定允许对资源执行的操作,例如get、watch、list等。

Kubernetes中的RoleBinding是什么?

RoleBinding是一种用于将角色与用户或组绑定在一起的Kubernetes对象。它可以授权用户执行与指定角色相关联的操作。

如何创建一个RoleBinding?

可以使用kubectl create或kubectl apply命令来创建RoleBinding。例如:

kubectl create -f rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: my-role-binding
roleRef:
  kind: Role
  name: my-role
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: my-serviceaccount
  namespace: default

Kubernetes中的Cluster Role是什么?

Cluster Role是一种用于定义用户对整个集群范围内资源的访问权限的Kubernetes对象。它可以控制用户对Namespace、Persistent Volume等资源的访问。

如何创建一个Cluster Role?

可以使用kubectl create或kubectl apply命令来创建Cluster Role。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: my-cluster-role
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

如何创建一个ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: my-cluster-role-binding
roleRef:
  kind: ClusterRole
  name: my-cluster-role
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: my-serviceaccount
  namespace: default

你可能感兴趣的:(容器化,云原生,笔记,kubernetes,docker,运维)