1.以命令方式启动一个deployment和service:
kubectl run mynginx --image=nginx --replicas=2
kubectl expose deployment mynginx --type=NodePort --name=nginx --port=80
第一个命令是创建名字为mynginx的两个pod的调度任务;
第二个是发布这个调度任务为service,并且使用NodePort方式暴露端口,其中供k8s内网使用的端口为80;
你就会看到如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.99.14.135 80:30001/TCP 8m
注意,这个供外部访问的30001是动态生成的;
___接下来你可以使用http://192.168.134.131:30001访问nginx了.这个是我虚拟机的ip;
2.使用配置文件方式:
命令是:
kubectl create -f 你的两个yml文件
deployment:
apiVersion: apps/v1 //相应版本,根据k8s的版本
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx //这个在我这1.10.2版本必须有这个,就是个选择器筛选吧
replicas: 2 //启动俩
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80 //相当于容器本身暴露的端口,不写貌似也暴露
service:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: NodePort //这里使用节点暴露端口方式
ports:
- port: 8888 //这个是供内网访问的端口
targetPort: 80 //这个是与容器暴露的端口一致,不写好像也可以
nodePort: 30001 //这个就是提供给外部和个节点访问的了
selector:
app: nginx
出来的结果:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.99.14.135 8888:30001/TCP 13m
这玩意卡我好久....用配置文件的方式咋都不行...最近有点蒙圈;
___________________________________________________________________________
部署一个java和nginx,并且nginx访问java~今天又解决一堆坑:
1.编写service和deployment的yml配置文件(之前写一起了,现在觉得还是分开比较好)
java:
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-deployment
spec:
selector:
matchLabels:
app: java
replicas: 1
template:
metadata:
labels:
app: java
spec:
nodeSelector:
node: node1
containers:
- name: java
image: app:v1
ports:
- containerPort: 8080
apiVersion: v1
kind: Service
metadata:
name: java-service
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
selector:
app: java
nginx:
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
nodeSelector:
node: node1
containers:
- name: nginx
image: mynginx:v1
ports:
- containerPort: 80
volumeMounts:
- mountPath: /etc/nginx/conf.d/default.conf
name: conf
subPath: default.conf
volumes:
- name: conf
hostPath:
path: /home/gao/conf.d/
注意的是我这版本的如果挂载文件的话,需要使用subPath来声明文件名称;如果挂载的是文件夹,那么可以去掉subPath,相应的挂载目录也就到文件夹:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
ports:
- port: 8888
targetPort: 80
nodePort: 30001
selector:
app: nginx
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api {
# proxy_pass http://client/api;
proxy_pass http://java-service:8080/api;
}
}
这里的转发的java地址是service的名称,这样就能动态解析到java的ip;当然我之前使用ClusterIP也可以访问到java,但是遇到的问题就是高频次的出现502.....