目录
案例:自主式创建service并关联上面的pod
案例:部署redis
案例:部署myapp
案例:部署MySQL数据库
总结
1.K8S集群中访问流向
K8S集群外部:客户端——nodeIP:nodeport——通过target port——podIP:containerport
2.语法格式
3.yaml文件组成部署
4.常用字段的含义
案例:自主式创建service并关联上面的pod
资源名称:my-nginx-kkk
命名空间:my-kkk
容器镜像:nginx:1.21
容器端口:80
标签:njzb: my-kkk
创建 server去关联上面的pod
结果:首先修改页面:tian wai lai wu,对外访问,输入地址就能访问
1. 试创建文件获取模板文件
kubectl create ns my-kkk --dry-run -oyaml
kubectl run my-nginx-kkk --image=nginx:1.21 --port=80 --dry-run -oyaml > pod.yaml
2. 编写yaml文件
kubectl get svc
kubectl get svc nginx -oyaml
vim pod.yaml
kubectl apply -f pod.yaml
kubectl get svc,pod -n my-kkk
将获取的yaml资源内容复制过来,进行修改
vim pod.yaml
apiVersion: v1
kind: Namespace
metadata:
name: my-kkk
---
apiVersion: v1
kind: Pod
metadata:
labels:
njzb: my-kkk
name: my-nginx-kkk
namespace: my-kkk
spec:
containers:
- image: nginx:1.21
name: my-nginx-kkk
ports:
- containerPort: 80
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
labels:
njzb: my-kkk
name: my-nginx-kkk
namespace: my-kkk
spec:
ports:
- nodePort: 31111 ###节点端口号
port: 80 ###服务暴露端口
protocol: TCP ###通信协议
targetPort: 80 ###要转发到的容器端口
selector:
njzb: my-kkk ###该服务所选择的后端pod
type: NodePort
3. 测试结果
案例:部署redis
[root@master01 demo]# vim redis.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-dpm
labels:
app: redis
spec: ###资源所需参数
replicas: 1
selector:
matchLabels:
app: redis ###只会与标签app:redis的pod关联
template: ###业务模板,如果有多个副本,所有副本属性会按照模板进行匹配
metadata:
labels:
app: redis
spec: ###资源所需参数
containers:
- name: redis
image: redis:latest
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis-dbm
labels:
app: redis
spec:
selector:
app: redis
ports:
- nodePort: 32379
port: 6379
protocol: TCP
targetPort: 6379
type: NodePort
[root@master01 home]# kubectl get svc,pod
案例:部署myapp
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-kk
namespace: default
labels:
app: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: soscscs/myapp:v1
ports:
- containerPort: 80
案例:部署MySQL数据库
[root@master01 demo]# cat mysql.yaml
apiVersion: v1
kind: Namespace
metadata:
name: devops
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: devops-mysql
namespace: devops
spec:
replicas: 1
revisionHistoryLimit: 5 ###保留5个可以回滚的历史纪录
strategy:
type: RollingUpdate ###更新策略为:RollingUpdate;在进行更新时,将旧pod副本替换为
新的pod,确保服务的可用性
selector:
matchLabels:
app: devops-mysql
template:
metadata:
labels:
app: devops-mysql
spec:
volumes:
- name: devops-mysql
nfs:
server: 192.168.91.104
path: /root/data/nfs/mysql/devops
containers:
- name: devops-mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: abc123
imagePullPolicy: Always
ports:
- containerPort: 3306
volumeMounts:
- name: devops-mysql
mountPath: /var/lib/mysql
---
apiVersion: v1
kind: Service
metadata:
name: devops-mysql
namespace: devops
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
nodePort: 30011
selector:
app: devops-mysql
type: NodePort
sessionAffinity: ClientIP ###确保与客户端的会话一致性
[root@master01 demo]# vim mysql.yaml
[root@master01 demo]# kubectl apply -f mysql.yaml
[root@master01 home]# kubectl get svc,pod -n devops
总结
1.K8S集群中访问流向
port:为service在clusterIP上暴露的端口
targetport:对应容器映射在pod上的端口
nodeport:可以通过在K8S集群外部使用nodeIP+nodePort来去访问service
containerport:容器内部使用的端口
K8S集群内部:客户端——clusterIP:port——通过target port——podIP:containerport
K8S集群外部:客户端——nodeIP:nodeport——通过target port——podIP:containerport
2.语法格式
通过缩进表示层级关系
不能使用tab进行缩进,只能使用空格,一般开头缩进2个空格
字符后缩进一个空格,比如冒号,逗号等
使用—表示新的yaml文件的开始
使用#表示注释
3.yaml文件组成部署
(1)控制器定义
deployment:定义metadaea、spec、selector
通过yaml完成副本的定义,自主式的
(2)被控制对象
由哪一个控制器(自主式、deployment、statusfulset等)
4.常用字段的含义
如何快速编写yaml
(1)第一种使用kubectl create 命令生成yaml文件
(2)第二种使用kubectl get 命令导出yaml文件