基础概念
1.namespace,命名空间:可以在逻辑上对不同的项目或者说小组进行划分,如我们部门就是iot,不指定就是默认defalut
——查看所有的命名空间: kubectl get namespaces
2.Node ,节点,集群的机器单位,可能是真实机器,也可能是虚拟机(其中有一个node是master)
--查找相关名称节点的大概信息命令(加-owdie会更多信息,如内网ip等等)
kubectl get node -n [namspace] |grep [key-words]
--查看指定node的详细信息(如果是加了|grep查询多个node的详情,细节会相对少很多)
kubectl describe node -n [ns] -owide [node-name]
--编辑node的配置信息
kubectl edit ndoe -n [ns] [node-name]
3.pod,在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是最小的,管理,创建,计划的最小单元。一个Pod是一个容器环境下的“逻辑主机”,里面可能包含一个或者多个紧密相连的应用(比如mysql应用,前端应用)
pod也叫容器集:部署到单个节点上且包含一个或多个容器的容器组
kubectl get/describe/edit同上
进阶概念
4.service:服务,也可以理解为我们常说的微服务,一种将一组容器集上运行的应用开放为网络服务的方法,是k8s的核心概念,pod,RC,deployment等概念都是为了service打工的
如下图,deployment管理rs(replica set),rs管理pod,而这一切对外(第三方)提供服务,比如web页面,或者api
下为deployment的yaml配置,重点看spec的“selector”,还有最后面的“ports”:
--- flinktm.yaml ---- (Deployment)
apiVersion: apps/v1
kind: Deployment
metadata:
name: flinkjm
namespace: xxx
spec:
replicas: 2
selector:
matchLabels:
app: flink
component: jobmanager
template:
metadata:
annotations:
metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"prometheus", "path":"/metrics", "port":"8080"}]'
labels:
app: flink
component: jobmanager
spec:
//省略
containers:
- name: jobmanager
image: xxx
command: xxx
args: ["jobmanager","$(POD_IP)"]
workingDir: xxxx
env:
//省略
ports:
- containerPort: 8123
name: rpc
- containerPort: 8124
name: blob
- containerPort: 8091
name: ui
---- service-flinkjm.yaml ---,(Service)
对外开放一系列端口的应用,targetPort是后端Pod/Conianer中的实际端口号,不管是外部请求还是内部请求最终都会流入targetPort,对应deployment中某一个containerPort(如上),port是集群内部访问的端口,而nodePort代表Cluster向外网暴露出来的端口,可以让外网能够访问
kind: Service
apiVersion: v1
metadata:
name: service-flinkjm
namespace: xxx
spec:
ports:
- name: rpc
protocol: TCP
port: 8123
targetPort: 8123
nodePort: null
- name: blob-server
protocol: TCP
port: 8124
targetPort: 8124
nodePort: null
- name: webui
protocol: TCP
port: 8091
targetPort: 8091
nodePort: null
- name: ha
protocol: TCP
port: 50010
targetPort: 50010
nodePort: null
selector:
app: flink //(这里很关键,selector中的app是和deployment或者RC绑定的关键部分)
component: jobmanager //(由于flink的app下有jm也有tm所以二级定位依靠component,可以在deployment的yaml中找到)
type: ClusterIP
具体命令
kubectl get/describe/edit同上
————————————————————————————
(常见)
5. Replication Controller(RC)
老版本的pod控制器
6. deployment
RC的加强版,采用了Replica Set来实现,第四点service已经讲很清楚了
7. StatefulSet
k8s中,管理pod的RC,deployment都是面向无状态的服务,而有些服务比如zookeeper就需要每个节点有状态,这就可以用StatefulSet管理
8.关系总结:
-Container:首先是pod里面会有多个Container,需要pod来处理多个容器之间的关系,比如一个Web前端的应用,可能还得依赖后端的一个容器服务;后端的容器可能需要数据库服务;后端的服务需要多副本等等场景
-ConfigMap和Secret:多个pod之间可以共享很多信息,也可能需要读取同一份配置,比如Pod内有两个容器需要访问同一个数据库,那么我们可以把相关的配置信息写到ConfigMap里。那如果还有一些比较敏感的信息的话,就需要放到Secret对象中。
-任务和定时任务:首先来看定时任务的需求,假设我的系统内有一个全网信息排行榜展示,要求每天需要在凌晨0点的时候更新一次。这个需求在K8s里就可以用CronJob来搞定。而如果仅仅需要执行一次的任务,那就直接使用Job对象就可以了。
总体总结:
图中上面三个(deployment,service,ingress)前面也讲过了,总结下来就是下面一张图