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

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