目 录
- 一、声明式资源管理
- ①声明式管理方法
- ②基本操作综合
- ② 走进 .yaml 文件
- (1)写一个 deployment 的 .yaml 文件
- (2)写一个 service 的 .yaml 文件
- (3)详解K8S中的port
- 1 port
- 2 targetPort
- 3 nodePort
- 4 containerPort
一、声明式资源管理
①声明式管理方法
- 适合于对资源的修改操作
- 声明式资源管理方法依赖于资源配置清单文件对资源进行管理
资源配置清单文件有两种格式: yaml(人性化,易读),json(易于api接口解析) - 对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
- 语法格式: kubectl create/apply/delete -f xxxx.yaml
②基本操作综合
#查看资源配置清单
kubectl get deployment nginx -o yaml
#解释资源配置清单
kubectl explain deployment.metadata
kubectl get service nginx -o yaml
kubectl explain service.metadata
#修改资源配置清单并应用
离线修改:
修改yaml文件,并用kubectl apply -f xxxx.yaml 文件使之生效注意:当apply不生效时,先使用delete清除资源,再apply创建资源
kubectl get service nginx -o yaml > nginx-svc.yarml
vim nginx-svc.yaml
#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yamlkubectl get svc
#删除资源配置清单陈述式删除
kubectl delete service nginx
#声明式删除
kubectl delete -f nginx-svc.yaml
在线修改: 直接使用kubectl edit service nginx在线编辑资源配置清单并保存退出即时生效(如port: 888)Ps:此修改方式不会对yaml文件内容修改
② 走进 .yaml 文件
(1)写一个 deployment 的 .yaml 文件
写一个yaml文件demo
mkdir / opt/ demo
cd demo/
vim nginx-deployment.yaml
apiVersion: apps/v1 #指定api版本标签
kind: Deployment #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata: #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
name: nginx-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
labels: #定义资源标签( Pod的标签)
app: nginx
spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
replicas: 3 #定义副本数量
selector: #定义标签选择器
matchlabels: #定义匹配标签
app: nginx #匹配上面的标签,需与上面的标签定义的app保持一致
templaLe: #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
metadata:
labels:
app: nginx
spec:
containers : #定义容器属性
- name : nginx #定义一个容器名, 一个 - narme: 定义一个容器
image: nginx:1.15.4 #定义容器使用的镜像以及版本
ports:
- containerPort: 80 #定义容器的对外的端口
创建资瀑对象
kubectl create -f nginx-deployment. yaml
(2)写一个 service 的 .yaml 文件
创建service服务对外提供访问并测试
vim nginx-service. yaml
apiVersion: v1
kind: service
metadata:
name: nginx-service
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
app: nginx
#创建资源对象
kubectl create -f nginx-service.yaml
(3)详解K8S中的port
service中的Port
service中主要涉及到了三种port:port、targetPort、nodePort
1 port
这里的port表示service暴露在clusterIP上的端口,clusterIP:Port 是提供给集群内部访问kubernetes服务的入口。
2 targetPort
targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。
3 nodePort
就是Node的基本port。选择该值,这个servce就可以通过NodeIP:NodePort访问这个Service服务,NodePort会路由到Cluster IP服务,这个Cluster IP会通过请求自动创建。
4 containerPort
containerPort是 Pod 内部容器的端口,targetPort映射到 containerPort。
总的来说,port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod上的容器内。
#kubectl run --dry-run打印相应的API对象而不执行创建
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run
#查看生成yaml格式
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml
#查看生成json格式
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o json
#使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
kubectl run nginx-test ---image=nginx --port=80 --replicasm3 --dry-run -o yaml > nginx-test . yaml
#将现有的资源生成模板导出
kubectl get deployment/nginx-deployment --export -o yaml
#保存到文件中
kubectl get deploy/nginx-deployment --export -o yaml > my-deploy.yaml
#查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers或
kubectl explain pods. spec.containers
//写yaml太累怎么办?●用run命令生成kubectl run my-deploy --image=nginx --dry-run -o yaml > my-deploy.yaml●用get命令导出kubectl get deploy/nginx-deployment --export -o=yaml > new.yaml1