声明式管理
离线式的修改
kubectl expose pod nginx-d9d8cf5c7-rcdsg --name hanbao-shutiao --type=NodePort --port=9090 --target-port=80
#将端口改为8800,nodeport改为4371
#4371不在端口范围内,所以报错
#改为43710
在线修改
#修改为立即生效
#将名字修改
#报错
所以在线修改并不是所有的都允许修改
YAML
apiVersion: v1 kind: Pod metadata: name: pod-demo1 namespace: hanbao labels: appname: myapp appver: v1 spec: containers: - name: myapp image: soscscs/myapp:v1 ports: - containerPort: 80 name: http protocol: TCP - containerPort: 443 name: https protocol: TCP
kubectl explain pod.spec.containers.ports
#创建资源对象
#查看hanbao命名空间里的pod服务的详细信息
apiVersion: v1 kind: Pod metadata: name: pod-demo1 namespace: hanbao labels: appname: myapp appver: v1 spec: containers: - name: myapp image: soscscs/myapp:v1 ports: - containerPort: 80 name: http protocol: TCP - containerPort: 443 name: https protocol: TCP - name: busybox image: busybox command: - /bin/sh - -c - sleep 3600
#无法更新, 那就重建
kubectl delete -f pod-demo1.yaml && kubectl apply -f pod-demo1.yaml
一小时后这个容器会自动退出
apiVersion: apps/v1 #指定api版本标签 kind: Deployment #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等 metadata: #定义资源的元数据信息,比如资源的名称、namespace、标签等信息 name: deploy-demo2 #定义资源的名称,在同一个namespace空间中必须是唯一的 namespace: hanbao #命名空间名称 #labels: #annotations: spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性 replicas: 5 #定义副本数量 selector: #定义标签选择器 matchLabels: #定义匹配标签 myname: myapp #需与 .spec.template.metadata.labels 定义的标签保持一致 template: #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配 metadata: labels: #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致 myname: myapp spec: containers: #定义容器属性 - name: myapp #定义一个容器名,一个 - name: 定义一个容器 image: soscscs/myapp:v2 #定义容器使用的镜像以及版本 ports: - containerPort: 80 #定义容器的对外的端口 name: http
status可忽略
描述命名空间的详细信息
kubectl describe deployments.apps -n hanbao deploy-demo2
Service yaml
apiVersion: v1 kind: Service metadata: name: svc-demo3 namespace: hanbao spec: type: NodePort selector: myname: myapp ports: - port: 8080 nodePort: 30888 targetPort: 80 clusterIP: 10.0.0.100
#创建
#查看svc-demo3的详细信息
externalTrafficPolicy
kubectl get -n hanbao svc svc-demo3 -o yaml
默认值为cluster,这个字段外部流量策略
externalTrafficPolicy”字段可以设置。有2个值可以设置:Cluster或者Local。
1)Cluster表示:流量可以转发到其他节点上的Pod。
2)Local表示:流量只发给本机的Pod。
.
#三个pod都可以转发
#查看它们工作在哪个服务器上
通过资源配置清单创建资源对象
获取K8S资源配置清单文件模板? 1)手写yaml配置文件,可以根据 kubectl explain 命令获取字段信息 2)查看现有的资源配置获取: kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > XXX.yaml kubectl edit -n <命名空间> <资源类型> <资源名称> ,然后手动复制资源配置,粘贴到yaml文件中 3)无中生有(模拟运行kubectl陈述式创建资源的命令获取): kubectl create|run|expose 选项 --dry-run=client -o yaml > XXX.yaml 4)复制K8S官网文档的资源配置案例
关于配置清单常见的字段
apiversion: #指定资源对象的在K8S中使用的api接口版本
kind: #指定资源对象的类型
metadata: #指定资源对象的元数据信息,比如name指定资源名称、namespace指定命名空间、annotation指定注释、label指定标签
spec: #指定资源对象的资源配置清单(配置属性) ,比如副本数、镜像、网络模式、存储卷、label selector标签选择器
status: #资源对象在当前的运行状态信息
无中生有创建模板,修改文件创建新资源
无中生有创建deployment资源
kubectl create deployment deploy-demo2.yaml --image=nginx --port=80 --replicas=3 --dry-run -o yaml > deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: deploy-demo2.yaml name: deploy-demo2.yaml spec: replicas: 3 selector: matchLabels: app: deploy-demo2.yaml strategy: {} template: metadata: creationTimestamp: null labels: app: deploy-demo2.yaml spec: containers: - image: nginx name: nginx ports: - containerPort: 80 resources: {} status: {}
无中生有创建service资源
kubectl create svc nodeport svc-test --tcp=8080:80 --dry-run=client -o yaml > svc.yaml
apiVersion: v1 kind: Service metadata: creationTimestamp: null labels: app: svc-test name: svc-test spec: ports: - name: 8080-80 port: 8080 protocol: TCP targetPort: 80 selector: app: svc-test type: NodePort status: loadBalancer: {}
补充案例
//kubectl run --dry-run=client 打印相应的 API 对象而不执行创建 kubectl run nginx-test --image=nginx --port=80 --dry-run=client kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client //查看生成yaml格式 kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml //查看生成json格式 kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json //使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数 kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml > nginx-deploy.yaml
根据官方文档案例
https://kubernetes.io/zh-cn/docs/home/
总结
声明式资源管理方式 (可理解成使用yaml配置文件里定义的配置来实现资源对象的管理操作)
通过kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > xxx.yaml #先获取资源配置清单
kubectl apply|create -f xxx.yaml #创建或更新资源
kubectl delete -f xxx.yaml #删除资源
kubectl edit -n <命名空间> <资源类型> <资源名称> #在线修改资源配置
对于不支持在线修改的字段只能通过离线修改的方式更新资源: kubectl delete -f xxx.yaml && kubectl apply -f xxx.yaml
kubectl explain <资源类型>、<一级字段>、<二级字段>... #获取资源配置字段的解释
#如何获取K8S资源配置清单文件模板(yaml配置文件) 1)手写yaml配置文件,可以根据kubectl explain 命令获取字段信息 2)查看现有的资源的配置获取: 通过kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > XXX.yaml / kubectl edit -n <命名空间> <资源类型> <资源名称>,然后手动复制资源配置,粘贴到yaml文件中 3)无中生有(模拟运行kubectl陈述式创建资源的命令来获取): kubectl create|run|expose 选项 --dry-run=client -o yaml > XXX.yaml 4)复制K8S官网文档的资源配置案列 #关于配置清单常见的字段 apiversion: #指定资源对象的在K8S中使用的api接口版本 kind: #指定资源对象的类型 metadata: #指定资源对象的元数据信息,比如name指定资源名称、namespace指定命名空间、annotation指定注释、label指定标签 spec: #指定资源对象的资源配置清单(配置属性) ,比如副本数、镜像、网络模式、存储卷、label selector标签选择器 status: #资源对象在当前的运行状态信息
标签:kubectl,run,name,nginx,--,管理,yaml,声明 From: https://www.cnblogs.com/yanrui07/p/18037583