资源类型组 和 资源类型
支持的API版本
root@k8s-node01:~# kubectl api-versions
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
batch/v1
certificates.k8s.io/v1
coordination.k8s.io/v1
discovery.k8s.io/v1
events.k8s.io/v1
flowcontrol.apiserver.k8s.io/v1beta2
flowcontrol.apiserver.k8s.io/v1beta3
networking.k8s.io/v1
node.k8s.io/v1
policy/v1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
v1
支持的API资源
root@k8s-node01:~# kubectl api-resources --api-group=apps
NAME SHORTNAMES APIVERSION NAMESPACED KIND
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
root@k8s-node01:~#
核心资源类型
Kubernetes API Primitive
用于描述在Kubernetes上运行应用程序的基本组件,即俗称的Kubernetes对象(Object)
它们持久存储于API Server上,用于描述集群的状态
依据资源的主要功能作为分类标准,Kubernetes的API对象大体可分为如下几个类别
工作负载(Workload)相关
- 编排POD
- Deployment 无状态应用
- Statefulset 有状态应用
- Deamonset 系统应用
- Replicaset 由副本数目的定义和一个 Pod 模板组成的, Deployment控制器会操控创建Replicaset对象
服务发现和负载均衡(Discovery & LB)
- ingress接入集群的外部流量 并且进行分发
配置和存储(Config & Storage)
集群(Cluster)
- 水平扩容 向外扩容 不停的加pod
- 垂直扩容 扩容配置cpu 内存
元数据(Metadata)
总结:都是围绕如何为POD更好的运行 而服务的
示例
run Demonapp application 无状态应用
命令式 创建容器化应用
kubectl create deployment -h
Examples:
# Create a deployment named my-dep that runs the busybox image
kubectl create deployment my-dep --image=busybox
# Create a deployment with a command
kubectl create deployment my-dep --image=busybox -- date
# Create a deployment named my-dep that runs the nginx image with 3 replicas
kubectl create deployment my-dep --image=nginx --replicas=3
# Create a deployment named my-dep that runs the busybox image and expose port 5701
kubectl create deployment my-dep --image=busybox --port=5701
常用选项 --image 编排运行的pod模版 中 容器默认使用的镜像 --replicas 运行的pod的副本的数量 --dry-run client 仅打印 仅测试是否能够成功完成 但不会真正的创建资源
仅打印资源清单
kubectl create deployment demoapp --image=ikubernetes/demoapp:v1.0 --replicas=3 --dry-run=client -o yaml
5个一级字段解释
apiVersion 资源组的版本 kind 负载类型 metadata 定义对象元数据 spec 期望的对象的终态 status 控制器显示的状态
创建一个 deployment资源类型 的对象
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl create deployment demoapp --image=ikubernetes/demoapp:v1.0 --replicas=3
deployment.apps/demoapp created
列出 deployment资源规范及状态
kubectl get deployments [-o yaml|json]
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
demoapp 0/3 3 0 7s
列出 pod 下的所有对象
kubectl get pods -l app=demoapp -o wide
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
demoapp-75f59c894-g78kd 1/1 Running 0 115s
demoapp-75f59c894-sjk82 1/1 Running 0 115s
demoapp-75f59c894-tfd78 1/1 Running 0 115s
列出详细的资源信息
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl get pods demoapp-75f59c894-g78kd
NAME READY STATUS RESTARTS AGE
demoapp-75f59c894-g78kd 1/1 Running 0 2m44s
kubectl get pods demoapp-75f59c894-g78kd -o yaml
删除pod
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl delete pods demoapp-75f59c894-g78kd
pod "demoapp-75f59c894-g78kd" deleted
查看pods的 labelsb标签
kubectl get pods --show-labels
每个资源对象的定义
遵循引用的资源类型的规范(数据的范式 JSON YAML)
- 必选字段
- 可选字段 创建完成后 需要提交给apiserver
创建 service类型的队形
service的种类
root@k8s-master01:~# kubectl create service -h
Available Commands:
clusterip Create a ClusterIP service
externalname Create an ExternalName service
loadbalancer Create a LoadBalancer service
nodeport Create a NodePort service
仅打印资源清单
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl create service nodeport demoapp --tcp=80:80 --dry-run=client -o yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: demoapp
name: demoapp
spec:
ports:
- name: 80-80
port: 80
protocol: TCP
targetPort: 80
selector:
app: demoapp
type: NodePort
status:
loadBalancer: {}
创建service对象
root@k8s-master01:~# kubectl create service nodeport demoapp --tcp=80:80
service/demoapp created
查看标签(selector 标签选择器)
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
demoapp-75f59c894-sjk82 1/1 Running 0 31m app=demoapp,pod-template-hash=75f59c894
demoapp-75f59c894-tbfbq 1/1 Running 0 3m54s app=demoapp,pod-template-hash=75f59c894
demoapp-75f59c894-tfd78 1/1 Running 0 31m app=demoapp,pod-template-hash=75f59c894
查看services资源对象
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl get services --show-labels
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
demoapp NodePort 10.96.172.179 <none> 80:32638/TCP 6s app=demoapp
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 140m component=apiserver,provider=kubernetes
访问service
curl 10.102.174.101的时候 可以看到负载到不同的节点
iptable规则可以看到
每一个service都会有一个endpoints 这个endpoints是自动创建的
root@iZ0jli08cedg6bfntl7yucZ:~# kubectl get endpoints -o wide
NAME ENDPOINTS AGE
demoapp 10.244.1.2:80,10.244.1.3:80,10.244.2.3:80 3m11s
kubernetes 172.30.64.3:6443 143m
单独获取clusterIP属性
kubectl get services demoapp -o jsonpath={.spec.clusterIP}
扩容 & 缩容
kubectl scale --replicas=3 deployment/nginx
kubectl scale --replicas=1 deployment/nginx