基本概念
https://www.redhat.com/zh/topics/containers/kubernetes-architecture
https://www.kubernetes.org.cn/kubernetes设计架构
架构
node
Node是Pod真正运行的主机,可以物理机,也可以是虚拟机。为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或者rkt)、kubelet和kube-proxy服务。
pod
在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是最小的,管理,创建,计划的最小单元, 一个pod中可以定义多个容器, 多个容器共享存储和网络
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-storage
mountPath: /data/redis
volumes:
- name: redis-storage
emptyDir: {}
service
https://kubernetes.io/zh/docs/concepts/services-networking/connect-applications-service/
Kubernetes中一个应用服务会有一个或多个实例(Pod,Pod可以通过rs进行多复本的建立),每个实例(Pod)的IP地址由网络插件动态随机分配(Pod重启后IP地址会改变)。为屏蔽这些后端实例的动态变化和对多实例的负载均衡
namespace
Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。
Namespace常用来隔离不同的用户,比如Kubernetes自带的服务一般运行在kube-system namespace中。
deployment
Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括:
- 定义Deployment来创建Pod和ReplicaSet
- 滚动升级和回滚应用
- 扩容和缩容
- 暂停和继续Deployment
k8s基本结构图
https://jimmysong.io/kubernetes-handbook/guide/kubectl-cheatsheet.html
https://swissarmydevops.com/containers/kubernetes/kubernetes-cheat-sheet
K8S基本操作命令(命令+截图)
- 取个别名, 替换kubectl -n test-center-12345678910
alias kk='kubectl -n test-center-12345678910'
## 不用每次都输那么一长串的namespace了
kk get pod
kk get deployment
- 如何查看运行的POD
kubectl get pod --all-namespaces
kubectl -n ns-account get pod
kubectl get pods --all-namespaces | grep xdr9n # 查找所有namespace下的pod 然后筛选出某个pod
- 如何启动一个POD
kubectl apply -f pod.yaml
- 如何停止一个POD
kubectl scale --replicas=0 pod/<pod-name>
- 如何查看POD的状态(CPU/状态/内存)
kubectl top pod <pod-name>
CPU 单位: 1核 = 1000m, 0.5核=500m, 通常用m单位, 直接填1表示1核
- 如何查看POD挂载的文件目录
kubectl describe pod <pod-name>
- 如何进入POD执行命令
kubectl exec -it <pod-name> /bin/bash
- 如何查看POD的运行配置
kubectl exec -it <pod-name> /bin/bash # 进入容器cd /app/app/remote/ # 进入容器内部的应用目录, 目前我们大部分中心化应用用的目录是 /app/app/remote
- 如何查案运行Service
kubectl get svc