Kubernetes资源详解
一、Kubernetes各种资源详解
1.1. kuelet可操作资源
kubectl可操作的资源及资源详解,可通过
kuebectl api-resources
获取详情
NAME | SHORTNAMES | APIVERSION | NAMESPACED | KIND |
---|---|---|---|---|
bindings | v1 | true | Binding | |
componentstatuses | cs | v1 | false | ComponentStatus |
configmaps | cm | v1 | true | ConfigMap |
endpoints | ep | v1 | true | Endpoints |
events | ev | v1 | true | Event |
limitranges | limits | v1 | true | LimitRange |
namespaces | ns | v1 | false | Namespace |
nodes | no | v1 | false | Node |
persistentvolumeclaims | pvc | v1 | true | PersistentVolumeClaim |
persistentvolumes | pv | v1 | false | PersistentVolume |
pods | po | v1 | true | Pod |
podtemplates | v1 | true | PodTemplate | |
replicationcontrollers | rc | v1 | true | ReplicationController |
resourcequotas | quota | v1 | true | ResourceQuota |
secrets | v1 | true | Secret | |
serviceaccounts | sa | v1 | true | ServiceAccount |
services | svc | v1 | true | Service |
mutatingwebhookconfigurations | admissionregistration.k8s.io/v1 | false | MutatingWebhookConfiguration | |
validatingwebhookconfigurations | admissionregistration.k8s.io/v1 | false | ValidatingWebhookConfiguration | |
customresourcedefinitions | crd,crds | apiextensions.k8s.io/v1 | false | CustomResourceDefinition |
apiservices | apiregistration.k8s.io/v1 | false | APIService | |
controllerrevisions | apps/v1 | true | ControllerRevision | |
daemonsets | ds | apps/v1 | true | DaemonSet |
deployments | deploy | apps/v1 | true | Deployment |
replicasets | rs | apps/v1 | true | ReplicaSet |
statefulsets | sts | apps/v1 | true | StatefulSet |
tokenreviews | authentication.k8s.io/v1 | false | TokenReview | |
localsubjectaccessreviews | authorization.k8s.io/v1 | true | LocalSubjectAccessReview | |
selfsubjectaccessreviews | authorization.k8s.io/v1 | false | SelfSubjectAccessReview | |
selfsubjectrulesreviews | authorization.k8s.io/v1 | false | SelfSubjectRulesReview | |
subjectaccessreviews | authorization.k8s.io/v1 | false | SubjectAccessReview | |
horizontalpodautoscalers | hpa | autoscaling/v1 | true | HorizontalPodAutoscaler |
cronjobs | cj | batch/v1beta1 | true | CronJob |
jobs | batch/v1 | true | Job | |
certificatesigningrequests | csr | certificates.k8s.io/v1 | false | CertificateSigningRequest |
leases | coordination.k8s.io/v1 | true | Lease | |
bgpconfigurations | crd.projectcalico.org/v1 | false | BGPConfiguration | |
bgppeers | crd.projectcalico.org/v1 | false | BGPPeer | |
blockaffinities | crd.projectcalico.org/v1 | false | BlockAffinity | |
caliconodestatuses | crd.projectcalico.org/v1 | false | CalicoNodeStatus | |
clusterinformations | crd.projectcalico.org/v1 | false | ClusterInformation | |
felixconfigurations | crd.projectcalico.org/v1 | false | FelixConfiguration | |
globalnetworkpolicies | crd.projectcalico.org/v1 | false | GlobalNetworkPolicy | |
globalnetworksets | crd.projectcalico.org/v1 | false | GlobalNetworkSet | |
hostendpoints | crd.projectcalico.org/v1 | false | HostEndpoint | |
ipamblocks | crd.projectcalico.org/v1 | false | IPAMBlock | |
ipamconfigs | crd.projectcalico.org/v1 | false | IPAMConfig | |
ipamhandles | crd.projectcalico.org/v1 | false | IPAMHandle | |
ippools | crd.projectcalico.org/v1 | false | IPPool | |
ipreservations | crd.projectcalico.org/v1 | false | IPReservation | |
kubecontrollersconfigurations | crd.projectcalico.org/v1 | false | KubeControllersConfiguration | |
networkpolicies | crd.projectcalico.org/v1 | true | NetworkPolicy | |
networksets | crd.projectcalico.org/v1 | true | NetworkSet | |
endpointslices | discovery.k8s.io/v1beta1 | true | EndpointSlice | |
events | ev | events.k8s.io/v1 | true | Event |
ingresses | ing | extensions/v1beta1 | true | Ingress |
flowschemas | flowcontrol.apiserver.k8s.io/v1beta1 | false | FlowSchema | |
prioritylevelconfigurations | flowcontrol.apiserver.k8s.io/v1beta1 | false | PriorityLevelConfiguration | |
nodes | metrics.k8s.io/v1beta1 | false | NodeMetrics | |
pods | metrics.k8s.io/v1beta1 | true | PodMetrics | |
ingressclasses | networking.k8s.io/v1 | false | IngressClass | |
ingresses | ing | networking.k8s.io/v1 | true | Ingress |
networkpolicies | netpol networking.k8s.io/v1 | true | NetworkPolicy | |
runtimeclasses | node.k8s.io/v1 | false | RuntimeClass | |
poddisruptionbudgets | pdb | policy/v1beta1 | true | PodDisruptionBudget |
podsecuritypolicies | psp | policy/v1beta1 | false | PodSecurityPolicy |
clusterrolebindings | rbac.authorization.k8s.io/v1 | false | ClusterRoleBinding | |
clusterroles | rbac.authorization.k8s.io/v1 | false | ClusterRole | |
rolebindings | rbac.authorization.k8s.io/v1 | true | RoleBinding | |
roles | rbac.authorization.k8s.io/v1 | true | Role | |
priorityclasses | pc | scheduling.k8s.io/v1 | false | PriorityClass |
csidrivers | storage.k8s.io/v1 | false | CSIDriver | |
csinodes | storage.k8s.io/v1 | false | CSINode | |
storageclasses | sc | storage.k8s.io/v1 | false | StorageClass |
volumeattachments | storage.k8s.io/v1 | false | VolumeAttachment |
1.2. Pod定义详解
Pod定义详解(Required表示必填)
# Required
apiVersion: v1 # 版本号,比如V1
# Required
kind: Pod # k8s资源类型,比如Pod、Service、Deployment
# Required
metadata: # 元数据
# Required
name: string # Pod 的名称,命名规范符合 RFC 1035 规范
# Required
namespace: string # Pod 所属的命名空间
labels:
- name: string # 自定义标签列表
annotations:
- name: string # 自定义注解列表
# Required
spec: # Pod中容器的详细定义
# Required
containers: # Pod 中的容器列表
# Required
- name: string # 容器名
# Required
image: string # 容器镜像名称
# Required
imagePullPolicy: [Always | Never | IfNotPresent] # 镜像拉取策略。Always表示每次都尝试重新拉取镜像; IfNotPresent表示如果本地有该镜像,则使用本地的镜像,本地不存在则拉取镜像;Never表示只使用本地镜像
command: [string] # 容器的启动命令列表
args: [string] # 容器的启动命令参数列表
workingiDir: string # 容器的工作目录
volumeMounts: # 挂载到容器内部的存储卷配置
- name: string # 引用Pod定义的共享存储卷的名称,需要使用 volumes[] 部分定义的共享存储卷名称
mountPath: string # 存储卷在容器内挂载的绝对路径,应小于512个字符
ports: # 容器需要暴露的端口号列表
- name: string # 端口号的名称
containerPort: int # 容器需要监听的端口
hostPort: int # 容器所在主机需要监听的端口,默认与containerPort相同。设置hostPort时,同一台宿主机将无法启动该容器的第二份副本
protocol: string # 端口协议,支持TCP合UDP,默认使用TCP
env: # 容器运行前需要设置的环境变量
- name: string # 环境变量的名称
value: string # 环境变量的值
resources: # 资源限制和资源请求的设置
limits: # 资源限制设置
cpu: string # CPU限制,单位为core 数,将用于docker run --cpu-shares参数
memory: string # 内存限制,单位可以为MiB、GiB,将用于docker run --memory参数
requests: # 资源请求的设置
cpu: string # CPU请求,单位为core数,启动容器时初始可用数量
memory: string # 内存请求,单位可以为MiB、GiB等,容器启动的初始可用数量
livenessProbe: # 对Pod内各容器健康检查的设置,当探测无响应几次之后,系统将自动重启该容器。可以设置的方法包括 etec、httpGet 和tcpSocket。对一个容器仅需要设置一种容器
exec: # 对Pod内各容器健康检查的设置,exec方式
command: [string] # exec方式需要指定的命令或者脚本
httpGet: # 对Pod内各容器健康检查的设置,HttpGet方式,需指定path、port
path: string
port: number
host: string
scheme: string
httpHeaders:
- name: string
value: string
tcpSocket: # 对Pod内各容器健康检查的设置,tcpSocke的方式
port: number
initialDelaySeconds: 0 # 容器启动完成后首次探测时间,单位为s
timeoutSeconds: 0 # 对容器健康检查的探测等待响应的超时时间设置,单位为s,默认为1。若超过该超时时间设置,则将默认认为该容器不健康,会重启该容器。
periodSeconds: 0 # 对容器健康检查的定期探测时间,单位为s,默认10s探测一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
restartPolicy: [Always | Never | OnFailure] # Pod的重启策略,可选值为Always、OnFailure。默认为Always。Always表示Pod一旦终止运行,则无论容器时如何终止的,kubelet都将重启它;OnFailure表示只有Pod以非0退出码终止时,kubelet才会重启该容器。如果容器正常退出(结束码为0),则kubelet不会重启它。
nodeSelector: object # 设置Node的Label,以key:value 格式指定,Pod将被调度到具有这些Label的Node上
imagePullSecrets: # pull 镜像时使用的Secret名称,以name:secretkey 格式指定
- name: string
hostNetwork: false # 是否使用主机网络模式,默认为false。设置为true表示容器使用宿主机网络,不再使用docker网桥,该Pod 将无法在同一台宿主机上启动第2 个副本。
volumes: # 在该pod上定义的共享存储卷列表
- name: string # 共享存储卷的名称。包括emptyDir、hostPath、gcePersistentDisk、awsElasticBlockStore、getRepo、Ssecret、nfs、iscsi、glusterfs、persistentVolumeClaim、rbd、flexVolume、cinder、cephfs、flocker、downlordAPI、fc、azureFile、configMap、vsphereVolume等,定义多个volume时,每个Volume的name保持唯一。
emptyDir: {} # 类型为empty的存储卷,表示与pod同生命周期的一个临时目录,其值为一个空对象
hostPath: # 类型为hostPath的存储卷,表示Pod容器挂载的宿主机目录
path: string
secret: # 类型为secret的存储卷,表示挂载集群预定义的secret对象到容器内部
secretName: string
items:
- key: string
path: string
configMap: # 类型为ConfigMap的存储卷,表示挂载集群预定义的ConfigMap对象到容器内部
name: string
items:
- key: string
path: string
1.3. Service定义详解
Service定义详解(Required表示必填)
# Required
apiVersion: v1 # 版本号
# Required
kind: Service # 类型
# Required
metadata: # 元数据
# Required
name: string # Service名称
# Required
namespace: string # 命名空间,不指定使用default的命名空间
labels: # 自定义标签属性列表
-name: string
annotations: # 自定义注解属性列表
- name: string
# Required
spec: # 详细描述
# Required
selector: [] # Label Selector配置,将选择具有指定Label标签的Pod作为管理范围
# Required
type: string # Service的类型,指定service的访问方式,默认为ClusterIP。 ClusterIP:虚拟服务IP地址,该地址用于kubernetes集群内部的Pod访问,在Node上kube-proxy通过设置的iptables规则进行转发;NodePort:使用宿主机的端口,使能够访问各Node的外部客户端通过Node的IP地址和端口号就能访问服务;LoadBalancer: 使用外界负载均衡器完成到服务的负载分发,需要在 spec.status.oadBalancer 字段指定外部负载均衡服务器的IP地址,同时定义 nodePort 和clusterIP,用于公有云环境。
clusterIP: string # 虚拟服务的IP地址,当type=clusterIP时,如果不指定,则系统自动分配,也可以手动指定;当type = LoadBalancer时需要指定
sessionAffinity: string # 是否指定Seesion,可选值为CientIP,默认值为None。ClientIP:表示将同一个客户端(根据客户端的IP地址决定)的访问请求都转发到同一个后端Pod
ports: # Service端口列表
- name: string # 端口名称
protocol: string # 端口协议,支持TCP和UDP,默认值为TCP
port: int # 服务端监听到的端口号
targetPort: int # 需要转发到后端Pod的端口号
nodePort: int # 当spec.type=NodePort时,指定映射到宿主机的端口号
status: # 当spec.type = LoadBalancer时,设置外部负载均衡的地址,用于公有云环境
loadBalancer: # 外部负载均衡器
ingress: # 外部负载均衡器
ip: string # 外部负载均衡器的IP地址
hostname: string # 外部负载均衡器的主机名
二、kubernetes 实操
2.1. 创建Namespace
# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: namespace-name
kubectl create -f namespace.yaml
2.2. 创建Pod
# mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql
name: mysql
namespace: supermap-test
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
kubectl apply -f mysql.yaml
2.3. 创建Service
# mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: supermap-test
spec:
type: NodePort
ports:
- port: 3306
selector:
app: mysql
kubectl create -f mysql-svc.yaml