声明式管理方法:
#将资源配置输出为yaml 格式
kubectl -n kube-public get deployments.apps nginx -o yaml
#查看deployment资源配置里字段解释(只能看到第一层的字段)
kubectl explain -n kube-public deployment
#查看deployment里的metadata字段解释
kubectl explain -n kube-public deployment.metadata
#查看service 资源配置里的第一层字段解释
kubectl explain -n kube-public service
#查看service配置里,metadata字段的解释
kubectl explain -n kube-public service.metadata
离线修改:
修改yaml 文件,并用 kubectl apply -f xxx.yaml 文件使之生效。
注意:当apply 不生效时,先使用delete 清除资源,在apply 创建资源
create 和 apply 的区别
#将service 资源配置以yaml格式显示,导入到nginx-svc.yaml里
kubectl -n kube-public get service nginx-service -o yaml > nginx-svc.yaml
#修改yaml 文件,将port 项值修改为8080
vim nginx-svc.yaml
#先使用声明式方式删除
kubectl delete -f nginx-svc.yaml
#指定yaml文件,使用声明式方式创建service
kubectl apply -f nginx-svc.yaml
#再次查看,端口变为了8080
kubectl get svc -n kube-public
直接使用kubectl edit service nginx
在线编辑资源配置清单,并保存退出。保存退出后立即生效(如port:888)此修改方式不会对yaml 文件内容修改
#使用kubect edit 在线修改 资源
kubectl edit -n kube-public service
#将port 值修改为888,并保存退出
kubectl get svc -n kube-public
#陈述式删除
kubectl -n kube-public delete service nginx-service
#指定yaml 文件,声明式删除
kubectl delete -f nginx-svc.yaml
Kubernetes支持YAML和JSON格式管理资源对象
YAML语法格式:
# 查看api 的版本,不同的k8s版本,支持的api version不同
kubectl api-versions
[root@master ~]# mkdir /opt/demo
[root@master ~]# cd /opt/demo/
[root@master demo]# vim nginx-deploymenet.yaml
apiVersion: apps/v1 #指定api版本标签
kind: Deployment #定义资源的类型。可以是Deployment,Job,Ingress,Service等
metadata: #定义资源的元数据信息,比如资源的名称,namespace,标签等信息
name: nginx-deployment #定义资源的名称,在同一个namespace空间中必须是唯一的
namespace: default #定义命名空间
labels: #定义Deployment资源标签
app: nginx
spec: #定义deployment资源需要的参数属性,如,是否在容器失败时重启容器的属性
replicas: 3 #定义副本的数量
selector: #定义标签选择器
matchLabels: #定义匹配的标签
app: nginx #需要与.spec.template.metadata.labels定义的标签保持一致
template: #定义 业务模板,如果有多个副本,所有的副本属性会按照模板的相关配置进行匹配
metadata: #定义pod使用的元信息
labels: #定义Pod副本将使用的标签,需要与.spec.selector.matchLabels 定义的标签保持一致
app: nginx
spec: #定义pod副本的属性(如pod里有几个容器,容器名,容器镜像,端口等)
containers: #定义容器属性
- name: nginx #容器的名称
image: nginx:1.15.12 #容器使用的镜像
ports: #定义容器使用的端口
- containerPort: 80 #容器使用80端口
ports:
- containerPort: 80
#创建资源对象
kubectl create -f nginx-deploymenet.yaml
#查看pod的信息
kubectl get pods -o wide
#查看pod使用的标签
kubectl get pods --show-labels
vim nginx-service.yaml
apiVersion: v1
kind: Service #定义资源类型为Service
metadata: #定义Service的元信息
name: nginx-service #定义service的名称
namespace: default #定义service的命名空间(和deployment在一个空间)
labels: #定义service的标签
app: nginx
spec: #设置service的属性
type: NodePort #指定service的类型,使用NodePort。
ports: #指定端口,一个容器里的服务,对应一个端口。有几个服务,就创建几组
- port: 8888 #指定ClusterIP 使用的端口
targetPort: 80 #指定pod使用的端口
nodePort: 31234 #如不指定,会在30000-32767 随机分配
selector: #使用标签选择器去选择和对应的pod进行关联
app: nginx
#创建资源对象
kubectl create -f nginx-service.yaml
#查看svc资源
kubectl get svc
curl -I http://192.168.23.12:31234
curl -I http://192.168.23.13:31234
#kubectl run --dry-run 打印相应的API对象而不执行创建
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run
#查看,并没有生成相应的pod
kubectl get pods
#查看生成的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 --replicas=3 --dry-run -o yaml > nginx-test.yaml
vim nginx-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: nginx-test
name: nginx-test
spec:
replicas: 3
selector:
matchLabels:
run: nginx-test
template:
metadata:
labels:
run: nginx-test
spec:
containers:
- image: nginx
name: nginx-test
ports:
- containerPort: 80
#根据模板创建资源
kubectl apply -f nginx-test.yaml
kubectl get pods
#将现有的资源生成模板导出。 --export 可以删除一些多余的配置
kubectl get deployments.apps nginx-deployment --export -o yaml
#将模板保存到文件中
kubectl get deployments.apps nginx-deployment --export -o yaml > my-deploy.yaml
vim my-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: my-deploy
spec:
progressDeadlineSeconds: 600
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app: mydeploy-nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: mydeploy-nginx
spec:
containers:
- image: nginx:1.15.12
name: nginx
ports:
- containerPort: 80
protocol: TCP
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
#根据模板生成资源
kubectl apply -f my-deploy.yaml
#查看生成的deployment 信息
kubectl get deployments.apps my-deploy