一、常用资源类型
1.工作负载类型 RC ReplicaController RS ReplicaSet DP Deployment DS DaemonSet 2.服务发现及负载均衡 Service Ingress 3.配置与存储资源 ConfigMap 存储配置文件 Secret 存储用户字典4.集群级别资源 Namespace Node Role ClusterRole RoleBinding ClusterRoleBinding
二、资源配置清单
1.创建资源的方法 apiserver仅能接受json格式的资源定义 yaml格式提供的清单,apiserver可以自动将其转换为json格式再提交2.资源清单介绍 查看资源清单所需字段 kubectl explain pod 资源清单字段介绍 apiVersion: v1 #属于k8s哪一个API版本或组 kind: Pod #资源类型 metadata: #元数据,嵌套字段 spec: #定义容器的规范,创建的容器应该有哪些特性 status: #只读的,由系统控制,显示当前容器的状态 json嵌套{ 1级: { 2级: { 3级:Value } }}3.查看资源清单嵌套的命令 kubectl explain pod kubectl explain pod.spec kubectl explain pod.spec.volumes4.使用命令行创建一个pod kubectl create deployment nginx --image=nginx:alpine kubectl get pod -o wide5.将刚才创建的pod配置到处成yaml格式 kubectl get pod -o yaml > nginx-pod.yaml 精简资源清单,删掉不需要的配置cat nginx-pod.yaml apiVersion: v1kind: Podmetadata: name: nginx labels: app: nginxspec: containers: - name: nginx image: nginx:alpine imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 json格式写法:{ apiVersion: "v1", kind: "Pod", metadata: { name: "nginx", labels: { app: "nginx" } } spec: { containers: { name: "nginx", image: "nginx:alpine", imagePullPolicy: "IfNotPresent" } } } 删除命令行创建的资源 kubectl delete deployments.apps nginx 应用资源配置清单 kubectl create -f nginx-pod.yaml 查看pod信息 kubectl get pod -o wide 查看pod详细信息 kubectl describe pod nginx
三、查看node标签
Node打标签1.查看node的标签kubectl get node --show-labels2.给node打标签kubectl label nodes node2 CPU=Xeonkubectl label nodes node3 disktype=ssd3.编辑POD资源配置清单,使用node标签选择器apiVersion: v1kind: Podmetadata: name: nginx labels: app: nginxspec: containers: - name: nginx image: nginx:1.14.0 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 nodeSelector: #CPU: Xeon disktype: SSD4.删除容器重新创建kubectl delete pod nginxkubectl create -f nginx-pod.yaml5.查看结果kubectl get pod -o wide6.删除节点标签kubectl label nodes node2 CPU-kubectl label nodes node3 disktype-
四、pod容器打标签
查看pod标签1.标签说明 一个标签可以给多个POD使用 一个POD也可以拥有多个标签 2.查看POD标签 kubectl get pod --show-labels3.添加标签方法方法1:直接编辑资源配置清单:apiVersion: v1kind: Podmetadata: name: nginx labels: app: nginx release: beta----------------------方法2:命令行打标签kubectl label pods nginx release=betakubectl label pods nginx job=linuxkubectl get pod --show-labels 4.删除标签kubectl label pod nginx job- kubectl get pod --show-labels5.实验: 生成2个POD,打上不同的标签,然后根据标签选择kubectl create deployment nginx --image=nginx:1.14.0kubectl get pod --show-labelskubectl label pods nginx-xxxxxxxx release=stablekubectl get pod --show-labels根据标签查看kubectl get pods -l release=beta --show-labels kubectl get pods -l release=stable --show-labels 根据标签删除kubectl delete pod -l app=nginx
五、实战操作步骤:
[root@node1 ~]# vim nginx-pod.yamlapiVersion: v1kind: Podmetadata: name: nginx labels: app: nginxspec: containers: - name: nginx image: nginx:alpine imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80#先查看pod信息[root@node1 ~]# kubectl get podNo resources found in default namespace.#应用资源配置清单(注意: 如果有,就先删除 kubectl delete dp nginx)[root@node1 ~]# kubectl create -f nginx-pod.yamlpod/nginx created#查看pod详细信息[root@node1 ~]# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx 1/1 Running 0 30s 10.2.1.2 node2 #访问查看[root@node1 ~]# curl 10.2.1.2Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.
For online documentation and support please refer tonginx.org.
Commercial support is available atnginx.com.
Thank you for using nginx.
运行一个demo小服务
1.编写资源配置清单[root@node1 ~/demo]# cat tomcat-demo.yaml apiVersion: apps/v1kind: Deployment metadata: name: mysqlspec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: "123456"---apiVersion: v1kind: Servicemetadata: name: mysqlspec: ports: - port: 3306 selector: app: mysql---apiVersion: apps/v1kind: Deployment metadata: name: mywebspec: replicas: 2 selector: matchLabels: app: myweb template: metadata: labels: app: myweb spec: containers: - name: myweb image: kubeguide/tomcat-app:v1 ports: - containerPort: 8080 env: - name: MYSQL_SERVICE_HOST value: 'mysql' - name: MYSQL_SERVICE_PORT value: '3306'---apiVersion: v1kind: Servicemetadata: name: mywebspec: type: NodePort ports: - port: 8080 nodePort: 30001 selector: app: myweb=====================================或者分开写四个yaml文件cat mysql-dp.yamlapiVersion: apps/v1kind: Deployment metadata: name: mysqlspec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: "123456"----------------------------------------------------cat mysql-svc.yamlapiVersion: v1kind: Servicemetadata: name: mysqlspec: ports: - port: 3306 selector: app: mysql-----------------------------------------------cat tomcat-dp.yamlapiVersion: apps/v1kind: Deployment metadata: name: mywebspec: replicas: 2 selector: matchLabels: app: myweb template: metadata: labels: app: myweb spec: containers: - name: myweb image: kubeguide/tomcat-app:v1 ports: - containerPort: 8080 env: - name: MYSQL_SERVICE_HOST value: 'mysql' - name: MYSQL_SERVICE_PORT value: '3306'-----------------------------------------------------cat tomcat-svc.yamlapiVersion: v1kind: Servicemetadata: name: mywebspec: type: NodePort ports: - port: 8080 nodePort: 30001 selector: app: myweb---------------------------------------------------
2.应用资源配置清单
[root@node1 ~]# kubectl create -f tomcat-demo.yaml deployment.apps/mysql createdservice/mysql createddeployment.apps/myweb createdservice/myweb created3.查询资源是否创建成功[root@node1 ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESmysql-8fcd9f64-vqkm9 1/1 Running 0 2m1s 10.2.1.2 node2 myweb-6f974fdbdc-gsncp 1/1 Running 0 2m 10.2.1.3 node2 myweb-6f974fdbdc-ngngv 1/1 Running 0 2m 10.2.2.2 node3 4.查询暴露的端口[root@node1 ~]# kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.1.0.1 443/TCP 22hmysql ClusterIP 10.1.120.187 3306/TCP 3m32smyweb NodePort 10.1.37.225 8080:30001/TCP 3m31s5.浏览器登录查看http://10.0.0.11:30001/demo/index.jsp