k8s常用命令备忘

小熊 Kubernetes评论2,094字数 3022阅读10分4秒阅读模式

2020年总结的,我已经不记得是从哪抄来的了,目前应该还能用

常用命令

kubectl cluster-info #查看集群信息
kubectl get nodes #集群节点 
kubectl get pods #查看pod --show-all (查看 Completed 状态的 Pod)
kubectl expose deployment/kubernetes-bootcamp \ #暴露应用端口
      --type="NodePort" \
      --port 8080
kubectl get services #获取当前的端口映射
kubectl get deployments #查看副本数
kubectl scale deployments/kubernetes-bootcamp --replicas=3 #调整副本数
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2 #滚动更新
kubectl rollout undo deployments/kubernetes-bootcamp #回退版本
kubectl describe pod <Pod Name> #查看 Pod 具体情况
kubectl describe deployment <deployment name> #查看应用详情
kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 #用Deployment 创建应用
kubectl apply -f xxx.yml #通过配置文件创建应用
kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123456 #创建Secret,每个 --from-literal 对应一个信息条目。
kubectl create secret generic mysecret --from-file=./username --from-file=./password #创建Secret,通过 --from-file,每个文件内容对应一个信息条目。
kubectl create secret generic mysecret --from-env-file=env.txt
kubectl get secret xxx #查看存在的 secret
kubectl create configmap myconfigmap --from-literal=config1=xxx --from-literal=config2=yyy #创建ConfigMap,同secret支持四种方式
kubectl delete pod PODNAME --force --grace-period=0 #强制删除pod

常用术语

  • Deployment:应用
  • Pod:一组容器的集合
  • Master:主要职责是调度,即决定将应用放在哪里运行
  • Node:运行容器应用
  • Controller:管理 Pod,定义了 Pod 的部署特性(Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job )
  • Deployment:最常用的 Controller,通过创建 Deployment 来部署应用。Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行
  • ReplicaSet:实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,我们通常不需要直接使用 ReplicaSet
  • DaemonSet:用于每个 Node 最多只运行一个 Pod 副本的场景。DaemonSet 通常用于运行 daemon
  • StatefuleSet:能够保证 Pod 的每个副本在整个生命周期中名称是不变的。而其他 Controller 不提供这个功能,当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化。同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。
  • Job:用于运行结束就删除的应用
  • Service:定义了外界访问一组特定 Pod 的方式。Service 有自己的 IP 和端口,Service 为 Pod 提供了负载均衡
  • Namespace:将一个物理的 Cluster 逻辑上划分成多个虚拟 Cluster,每个 Cluster 就是一个 Namespace。不同 Namespace 里的资源是完全隔离的
  • etcd:负责保存 Kubernetes Cluster 的配置信息和各种资源的状态信息
  • Liveness:探测让用户可以自定义判断容器是否健康的条件。如果探测失败,Kubernetes 就会重启容器。
  • Readiness:探测告诉 Kubernetes 什么时候可以将容器加入到 Service 负载均衡池中,对外提供服务。
  • emptyDir:最基础的 Volume 类型。Host 上创建的临时目录,生命周期与 Pod 一致,提供共享存储
  • hostPath:文件系统中已经存在的目录 mount 给 Pod 的容器
  • PersistentVolume (PV) :外部存储系统中的一块存储空间,由管理员创建和维护。与 Volume 一样,PV 具有持久性,生命周期独立于 Pod
  • PersistentVolumeClaim (PVC) :对 PV 的申请 (Claim)。PVC 通常由普通用户创建和维护。需要为 Pod 分配存储资源时,用户可以创建一个 PVC,指明存储资源的容量大小和访问模式(比如只读)等信息,Kubernetes 会查找并提供满足条件的 PV
  • Secret :以密文的方式存储数据,Secret 会以 Volume 的形式被 mount 到 Pod,容器也可以环境变量的方式使用这些数据

规则

  • Pod是k8s调度的最小单位
  • Pod 中的所有容器使用同一个网络 namespace,即相同的 IP 地址和 Port 空间。它们可以直接用 localhost 通信。同样的,这些容器可以共享存储,当 Kubernetes 挂载 volume 到 Pod,本质上是将 volume 挂载到 Pod 中的每一个容器。
  • k8s默认创建两个Namespace。default和kube-system
  • kubectl apply -f xxx.yml既可以创建Deployment也可以用来伸缩(Scale Up/Down)线增加或减少Pod 的副本数
  • 命令不指定namespace则只返回默认 namespace default 中的资源。
  • iptables 将访问 Service 的流量转发到后端 Pod,而且使用类似轮询的负载均衡策略
  • Kubernetes 集群内部可以通过 Cluster IP 和 DNS 访问 Service
  • Liveness 探测是重启容器;Readiness 探测则是将容器设置为不可用,不接收 Service 转发的请求;用 Liveness 探测判断容器是否需要重启以实现自愈;用 Readiness 探测判断容器是否已经准备好对外提供服务
  • Secret通过base64编码,命令查看时需要反编码:echo -n xxx|base64 --decode
  • Volume 方式使用的 Secret 支持动态更新(环境变量方式不支持):Secret 更新后,容器中的数据也会更新
  • Secret 可以为 Pod 提供密码、Token、私钥等敏感数据;对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap

weinxin
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
小熊