k8s核心资源分类
工作负载型资源(workload)
- pod:是k8s中最小的单元
- ReplicaSet:调度器,通过标签控制 pod 的副本数目
- Deployment:控制器,管理无状态的应用
- StatefulSet:管理有状态的应用
- DaemonSet:可以在每个节点运行 pod 主键
- Job:批处理
- CronJob:批处理
服务发现及负载均衡型资源(Service Discovery LoadBalance)
service
Ingress
创建资源的方式
使用命令进行创建
使用命令式资源清单创建
- apiserver 仅接收json格式的资源定义
- 使用yaml格式提供配置清单,apiserver 可自动将其转为 json 格式并执行
使用声明式资源清单创建 - 可以确保资源尽可能向声明的状态靠近,并且可以随时改变声明、随时应用新的声明
资源清单的组成
apiVersion:apiversion版本
- alpha(内测版)
- beta(公测版)
- stable(稳定版):例如v1
kind:资源类型
metadata:资源元数据 - name:同一类别下唯一
- namespace:名称空间
- labels:标签
- annotations:定义污点,
spec:期望的状态
status:当前的状态、本字段有k8s集群维护,用户不能定义和更改
资源清单格式
是一个 yaml文件
apiVersion: #指api的版本,一般是v1,定可以使用kubectl api-versions 获取版本信息
kind: #资源类型,例如pod
metadata: #资源元数据
name:
namespace #名称空间,不指定则默认是 default
labels #标签
spec: #详细定义对象
资源清单配置
//暴露端口可以在外部访问
[root@master ~]# vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: web-123
namespace: czh #指定名称空间,这是我事先通过 kubectl create ns czh 创建的
labels:
app: myweb
spec:
containers:
- name: web1
image: czh909626/httpd:v0.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
hostPort: 8080 #这个端口必须是有效的,不能随便写
[root@master ~]# kubectl create -f pod.yaml
pod/web-123 created
[root@master ~]# kubectl get pods -n czh -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-123 1/1 Running 0 10s 10.244.2.16 node2.example.com <none> <none>
一个pod创建两个容器
[root@master ~]# vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: web-123
namespace: czh
labels:
app: myweb
spec:
containers:
- name: web1
image: czh909626/httpd:v0.1
imagePullPolicy: IfNotPresent
- name: web2
image: busybox
command: ['/bin/sh','-c','sleep 3600']
[root@master ~]# kubectl create -f pod.yaml
pod/web-123 created
[root@master ~]# kubectl get pods -n czh -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-123 2/2 Running 0 16s 10.244.2.22 node2.example.com <none> <none>
//进入容器
[root@master ~]# kubectl exec -n czh -it web-123 -c web1 -- /bin/sh
/ #
deployment yaml
[root@master ~]# vim deploy.yaml
apiVersion: apps/v1 #api版本
kind: Deployment #资源类型
metadata: #元数据定义
name: nginx-deploy #名称
namespace: default #名称空间
labels: #标签
app: nginx-web
spec: #deployment定义
replicas: 3 #定义2个副本
selector: #标签选择器,匹配pod的标签
matchLabels:
app: nginx-web
template: #pod模板定义
metadata:
name: nginx-123
namespace: default
labels: #这里的标签必须和标签选择器的一致
app: nginx-web
spec: #pod内的容器定义
containers:
- name: web
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80 #暴露IP
[root@master ~]# kubectl create -f deploy.yaml
deployment.apps/nginx-deploy created
[rootmaster ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deploy-9h8b7f8ee6-42z4b 1/1 Running 0 10s 10.244.1.10 k8s-node1.example.com <none> <none>
nginx-deploy-9h8b7f8ee6-7ghls 1/1 Running 0 10s 10.244.2.26 k8s-node2.example.com <none> <none>
nginx-deploy-9h8b7f8ee6-fcsz5 1/1 Running 0 10s 10.244.2.27 k8s-node2.example.com <none> <none>
//暴露端口到主机
[root@master ~]# kubectl expose deployment nginx-deploy --port=80 --type=NodePort
service/nginx-deploy exposed
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d7h
nginx-deploy NodePort 10.101.226.188 <none> 80:31004/TCP 12s
service yaml
为上面创建的 Deployment 资源定义service资源
[root@master ~]# vim svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
namespace: default
spec:
selector:
app: nginx-web
type: NodePort
ports:
- nodePort: 30008
port: 80
targetPort: 80
[root@master ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d11h
nginx-svc NodePort 10.97.1.221 <none> 80:30008/TCP 3m16s
[root@kmaster ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deploy-9h8b7f8ee6-8ld62 1/1 Running 0 92s 10.244.2.50 k8s-node2.example.com <none> <none>
nginx-deploy-9h8b7f8ee6-jjk2v 1/1 Running 0 92s 10.244.1.38 k8s-node1.example.com <none> <none>
nginx-deploy-9h8b7f8ee6-mh8fm 1/1 Running 0 92s 10.244.1.39 k8s-node1.example.com <none> <none>
//查看endpoint资源端点列表
[root@master ~]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 192.168.31.140:6443 3d11h
nginx-svc 10.244.1.38:80,10.244.1.39:80,10.244.2.50:80 13s
本文介绍了k8s的核心资源,包括工作负载资源如Pod、ReplicaSet、Deployment和StatefulSet,以及服务发现和负载均衡的Service资源。重点讲解了如何通过资源清单(yaml格式)来创建和管理这些资源,包括apiserver的交互方式、资源清单的组成结构,以及Deployment和Service的具体配置示例。
1135

被折叠的 条评论
为什么被折叠?



