中网可信网站查询医院网站建设方案计划
集群架构
Docker 是每一个节点(包括 Master 节点和 Node 节点)的运行时环境。
kubelet 负责控制所有容器的启动和停止等,保证每个节点(包括 Master 节点和 Node 节点)正常工作,并且帮助 Node 节点和 Master 节点进行交互。
Master 节点的关键组件:
- kubelet(监工):所有节点必备的。控制当前节点所有 Pod 的生命周期以及与 api-server 交互等工作。
 - kube-api-server:负责接收所有请求。集群内对集群的任何修改都是通过命令行、UI 将请求发给 api-server 才能执行的。api-server 是整个集群操作对内、对外的唯一入口,不包含我们后来部署应用暴露端口的方式。
 - kube-proxy:整个节点的网络流量负责。
 - cri:容器运行时环境(如:Docker 、Podman 等)。
 
Node 节点的关键组件:
- kubelet(监工):所有节点必备的。控制当前节点所有 Pod 的生命周期以及与 api-server 交互等工作。
 - kube-proxy:整个节点的网络流量负责。
 - cri:容器运行时环境(如:Docker 、Podman 等)。
 
资源管理方式
① 命令式对象管理:直接通过命令去操作 Kubernetes 的资源。
kubectl run nginx-pod --image=nginx:1.17.1 --port=80 
 ② 命令式对象配置:通过命令配置和配置文件去操作 Kubernetes 的资源。
kubectl create/patch/delete -f nginx-pod.yaml 
 ③ 声明式对象配置:通过 apply 命令和配置文件去操作 Kubernetes 的资源。
kubectl apply -f nginx-pod.yaml 
|   类型  |   操作  |   适用场景  |   优点  |   缺点  | 
|   命令式对象管理  |   对象  |   测试  |   简单  |   只能操作活动对象,无法审计、跟踪  | 
|   命令式对象配置  |   文件  |   开发  |   可以审计、跟踪  |   项目大的时候,配置文件多,操作麻烦  | 
|   声明式对象配置  |   目录  |   开发  |   支持目录操作  |   意外情况下难以调试  | 
命令式对象管理
kubectl 命令
- kubectl 是 Kubernetes 集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署。
 
参数:
- command:指定要对资源执行的操作,如:create、get 、delete 等。
 - type:指定资源的类型,如:deployment 、pod 、service 等。
 - name:指定资源的名称,名称大小写敏感。
 - flags:指定额外的可选参数。
 
[root@k8s-master ~]# kubectl get pod 
NAME                     READY   STATUS    RESTARTS   AGE
nginx-65c4bffcb6-f9b55   1/1     Running   0          81m
[root@k8s-master ~]# kubectl get pod nginx-65c4bffcb6-f9b55 -o yaml
apiVersion: v1
kind: Pod
metadata:annotations:cni.projectcalico.org/containerID: c1ccb59bf2b30c580de0ee177f1eb122047ce0b066df816b434c559c0b89c094cni.projectcalico.org/podIP: 10.244.169.129/32cni.projectcalico.org/podIPs: 10.244.169.129/32creationTimestamp: "2024-12-27T10:04:42Z"generateName: nginx-65c4bffcb6-labels:app: nginxpod-template-hash: 65c4bffcb6name: nginx-65c4bffcb6-f9b55namespace: defaultownerReferences:- apiVersion: apps/v1blockOwnerDeletion: truecontroller: truekind: ReplicaSetname: nginx-65c4bffcb6uid: c04281de-fdb0-4f23-8309-8c4adb140977resourceVersion: "9026"uid: 4a282996-80b5-4cc8-85a1-1ccd0c22a090
spec:containers:- image: nginx:1.14-alpineimagePullPolicy: IfNotPresentname: nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /var/run/secrets/kubernetes.io/serviceaccountname: kube-api-access-mz6pkreadOnly: truednsPolicy: ClusterFirstenableServiceLinks: truenodeName: k8s-node2preemptionPolicy: PreemptLowerPrioritypriority: 0restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}serviceAccount: defaultserviceAccountName: defaultterminationGracePeriodSeconds: 30tolerations:- effect: NoExecutekey: node.kubernetes.io/not-readyoperator: ExiststolerationSeconds: 300- effect: NoExecutekey: node.kubernetes.io/unreachableoperator: ExiststolerationSeconds: 300volumes:- name: kube-api-access-mz6pkprojected:defaultMode: 420sources:- serviceAccountToken:expirationSeconds: 3607path: token- configMap:items:- key: ca.crtpath: ca.crtname: kube-root-ca.crt- downwardAPI:items:- fieldRef:apiVersion: v1fieldPath: metadata.namespacepath: namespace
status:conditions:- lastProbeTime: nulllastTransitionTime: "2024-12-27T10:04:42Z"status: "True"type: Initialized- lastProbeTime: nulllastTransitionTime: "2024-12-27T10:04:58Z"status: "True"type: Ready- lastProbeTime: nulllastTransitionTime: "2024-12-27T10:04:58Z"status: "True"type: ContainersReady- lastProbeTime: nulllastTransitionTime: "2024-12-27T10:04:42Z"status: "True"type: PodScheduledcontainerStatuses:- containerID: docker://d10a9daced59d3ab91e06aed7456808c727d450fdbb7b21be5180957f37e16baimage: nginx:1.14-alpineimageID: docker-pullable://nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7lastState: {}name: nginxready: truerestartCount: 0started: truestate:running:startedAt: "2024-12-27T10:04:57Z"hostIP: 192.168.58.233phase: RunningpodIP: 10.244.169.129podIPs:- ip: 10.244.169.129qosClass: BestEffortstartTime: "2024-12-27T10:04:42Z"
 
- 基本命令:
 
|   命令  |   翻译  |   命令作用  | 
|   create  |   创建  |   创建一个资源  | 
|   edit  |   编辑  |   编辑一个资源  | 
|   get  |   获取  |   获取一个资源  | 
|   patch  |   更新  |   更新一个资源  | 
|   delete  |   删除  |   删除一个资源  | 
|   explain  |   解释  |   展示资源文档  | 
- 运行和调试:
 
|   命令  |   翻译  |   命令作用  | 
|   run  |   运行  |   在集群中运行一个指定的镜像  | 
|   expose  |   暴露  |   暴露资源为 Service  | 
|   describe  |   描述  |   显示资源内部信息  | 
|   logs  |   日志  |   输出容器在 Pod 中的日志  | 
|   attach  |   缠绕  |   进入运行中的容器  | 
|   exec  |   执行  |   执行容器中的一个命令  | 
|   cp  |   复制  |   在 Pod 内外复制文件  | 
|   rollout  |   首次展示  |   管理资源的发布  | 
|   scale  |   规模  |   扩(缩)容 Pod 的数量  | 
|   autoscale  |   自动调整  |   自动调整 Pod 的数量  | 
- 高级命令:
 
|   命令  |   翻译  |   命令作用  | 
|   apply  |   应用  |   通过文件对资源进行配置  | 
|   label  |   标签  |   更新资源上的标签  | 
- 其他命令:
 
|   命令  |   翻译  |   命令作用  | 
|   cluster-info  |   集群信息  |   显示集群信息  | 
|   version  |   版本  |   显示当前 Client 和 Server 的版本  | 
资源类型(type)
- Kubernetes 中所有的内容都抽象为资源,可以通过下面的命令进行查看:
 
[root@k8s-master ~]# kubectl api-resources
 
- 经常使用的资源如下所示:
 
- 集群级别资源:
 
|   资源名称  |   缩写  |   资源作用  | 
|   nodes  |   no  |   集群组成部分  | 
|   namespaces  |   ns  |   隔离 Pod  | 
- Pod资源:
 
|   资源名称  |   缩写  |   资源作用  | 
|   Pods  |   po  |   装载容器  | 
- Pod资源控制器:
 
|   资源名称  |   缩写  |   资源作用  | 
|   replicationcontrollers  |   rc  |   控制 Pod 资源  | 
|   replicasets  |   rs  |   控制 Pod 资源  | 
|   deployments  |   deploy  |   控制 Pod 资源  | 
|   daemonsets  |   ds  |   控制 Pod 资源  | 
|   jobs  |   控制 Pod 资源  | |
|   cronjobs  |   cj  |   控制 Pod 资源  | 
|   horizontalpodautoscalers  |   hpa  |   控制 Pod 资源  | 
|   statefulsets  |   sts  |   控制 Pod 资源  | 
- 服务发现资源:
 
|   资源名称  |   缩写  |   资源作用  | 
|   services  |   svc  |   统一 Pod 对外接口  | 
|   ingress  |   ing  |   统一 Pod 对外接口  | 
- 存储资源:
 
|   资源名称  |   缩写  |   资源作用  | 
|   volumeattachments  |   存储  | |
|   persistentvolumes  |   pv  |   存储  | 
|   persistentvolumeclaims  |   pvc  |   存储  | 
- 配置资源:
 
|   资源名称  |   缩写  |   资源作用  | 
|   configmaps  |   cm  |   配置  | 
|   secrets  |   配置  | 
查看,创建,删除名称空间
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   46h
kube-node-lease   Active   46h
kube-public       Active   46h
kube-system       Active   46h
[root@k8s-master ~]# kubectl create ns dev
namespace/dev created
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   46h
dev               Active   2s
kube-node-lease   Active   46h
kube-public       Active   46h
kube-system       Active   46h
[root@k8s-master ~]# kubectl delete ns dev
namespace "dev" deleted
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   46h
kube-node-lease   Active   46h
kube-public       Active   46h
kube-system       Active   46h
 
