使用yaml创建Deployment
k8s deployment资源创建流程:
1. 用户通过 kubectl 创建 Deployment。
2. Deployment 创建 ReplicaSet。
3. ReplicaSet 创建 Pod。
对象的命名方式是:子对象的名字 = 父对象名字 + 随机字符串或数字
Deployment是一个定义及管理多副本应用(即多个副本 Pod)的新一代对象,与Replication Controller相比,它提供了更加完善的功能,使用起来更加简单方便
案例一
例1:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
启动一个pod 看看有几个副本
[root@k8s-mastet deployment.yaml]# kubectl apply -f nginx-depl.yml
deployment.apps/dep01 unchanged
service/mysvc unchanged
创建SERVICE
自己理解就是将自己的端口暴露给外界,让外界能访问
[root@kub-k8s-master prome]# vim nginx-depl.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep01
spec:
selector:
matchLabels: #必须设定的
app: web
replicas: 2
template:
metadata:
name: testnginx9
labels:
app: web
spec:
containers:
- name: testnginx9
image: daocloud.io/library/nginx
ports:
- containerPort: 80
创建pod
[root@kub-k8s-master prome]# kubectl apply -f nginx-depl.yml
- 创建service并且以nodePort的方式暴露端口给外网:
[root@kub-k8s-master prome]# vim nginx_svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysvc
spec:
type: NodePort #类型
ports:
- port: 8080
nodePort: 30001
targetPort: 80
selector: #选择器
app: web
创建pod
[root@kub-k8s-master prome]# kubectl apply -f nginx_svc.yaml
service/mysvc created
3.测试
[root@kub-k8s-master prome]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d18h
mysvc NodePort 10.100.166.208 <none> 8080:30001/TCP 21s
案例一nginx端口暴露
我直接写到一起拉 直接创建一个pod就可以
vim nginx-depl.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep01
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
name: testnginx9
labels:
app: nginx
spec:
containers:
- name: testnginx9
image: daocloud.io/library/nginx:1.12.0-alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: mysvc
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
targetPort: 80
selector:
app: nginx
通信原理概念图
创建pod测试
kubectl apply -f nginx-depl.yml
访问10.8.156.119:3001
访问10.8.156.120:3001
案例二tomcat端口暴露
我先用node节点把镜像拉下来拉,先拉后拉都一样,没有会自己拉取
node节点都操作
docker pull daocloud.io/library/tomcat:8.0.45
master节点操作
vim tomcat-depl.yml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep01
spec:
selector:
matchLabels:
app: tomcat
replicas: 2
template:
metadata:
name: testomcat
labels:
app: tomcat
spec:
containers:
- name: testtomcat
image: daocloud.io/library/tomcat:8.0.45
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: mysvc
spec:
type: NodePort
ports:
- port: 8081
nodePort: 30003
targetPort: 8080
selector:
app: tomcat
创建一个pod测试
[root@k8s-mastet deployment.yaml]# kubectl apply -f tomcat-depl.yml
deployment.apps/dep01 created
service/mysvc created
[root@k8s-mastet deployment.yaml]# kubectl get pods
NAME READY STATUS RESTARTS AGE
dep01-76b88bb67b-8kgmh 1/1 Running 0 7s
dep01-76b88bb67b-s66z8 1/1 Running 0 7s
[root@k8s-mastet deployment.yaml]#
测试10.8.156.119:3003
测试10.8.156.120:3003
案例三jenkins端口暴漏
步骤一:先去拉去镜像,或者自己dockerfile自己编写一个
node节点上面都拉取一下
master节点去编写 vim jenkins-depl.yml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: dep02
spec:
selector:
matchLabels:
app: jenkins
replicas: 2
template:
metadata:
name: testjenkins
labels:
app: jenkins
spec:
containers:
- name: testjenkins
image: daocloud.io/library/jenkins:2.60.2
---
apiVersion: v1
kind: Service
metadata:
name: mysvc
spec:
type: NodePort
ports:
- port: 8083
nodePort: 30011
targetPort: 8080
selector:
app: jenkins
跟上面思路一样,
创建 pod
kubectl apply -f jenkins-depl.yml
访问测试
10.8.156.118:30011
访问测试
10.8.156.120:30011