目录
1、配置文件yaml语法:
(1)Namespace的yaml语法:
(2)Deployment的yaml语法:
(3)Service的yaml语法:
2、创建namespace:
(1)编写namesapce的yaml:
(2)构建namesapce:
(3)查看namesapce:
3、构建部署nginx服务:
(1)编写部署nginx服务的yaml:
(2)创建文件夹:
(3)创建nginx的conf:
(4)上传nginx部署项目:
(5)通过文件构建:
(6)查看pod列表:
(7)查看pod详情:
(8)查看service列表:
(9)查看service详情:
4、测试访问nginx:
(1)宿主机访问:
(2)远程访问:
1、配置文件yaml语法:
(1)Namespace的yaml语法:
# 版本通过:kubectl api-versions查看
apiVersion: v1
# 类型为namespace
kind: Namespace
metadata:
# 决定了namespace显示名称
name: test-one
labels:
name: test-one
(2)Deployment的yaml语法:
# 版本通过:kubectl api-versions查看
apiVersion: extensions/v1beta1
# 类型为deployment
kind: Deployment
metadata:
labels:
app: myName
# 决定了Pod的显示名称
name: myName
spec:
# 副本个数。若为3,k8s会保证pod个数为3个,少了就增加,多了就删除
replicas: 1
template:
metadata:
labels:
# 标识Pod,在Service中的selector指定匹配label为app:myName
app: myName
name: myName
spec:
# Pod中包含的容器
s:
# 项目容器
- name: myName
imagePullPolicy: IfNotPresent
image: $image
env:
- name: PRODUCTION_NGINX
value: "1"
- name: PRODUCTION_SETTINGS
value: "1"
ports:
# 容器暴露的端口
-Port: 8000
name: http-8000
volumeMounts:
- name: nginx-config
mountPath: /mnt/nginx
- name: static
mountPath: /mnt/static
# Nginx容器
- name: nginx
image: nginx:1.16
ports:
-Port: 80
name: http
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d
- name: static
mountPath: /usr/share/nginx/html
volumes:
- name: static
emptyDir: {}
- name: nginx-config
emptyDir: {}
(3)Service的yaml语法:
# 版本通过:kubectl api-versions查看
apiVersion: v1
# 类型为Service
kind: Service
# 元数据
metadata:
# Service的名称
name: myName
# 标签key-value键值对
labels:
app: myName
# 声明
spec:
# 端口
ports:
# Service在集群内部暴露的端口
- port: 80
# 内部端口映射到Pod暴露出的端口
targetPort: 80
# 端口名称(标识类型)
name: http
# 对外暴露的端口号。不指定,则随机生成
nodePort: 30000
# 选择器
selector:
# 指定label中app=myName的Pod都归属于当前Service
app: myName
# Service类型,NodePort类型可以对外暴露。
# 不指定的话,则默认为ClusterIP,只能集群内部访问
type: NodePort
2、创建namespace:
(1)编写namesapce的yaml:
为了将namesapce构建过程进行持久化,方便别人查看,因此将构建namesapce的过程在yaml中编写好。然后将yaml文件上传到服务器中自定义文件夹内。示例如下:
apiVersion: v1
kind: Namespace
metadata:
name: namespace-lsy-test--one
labels:
name: namespace-lsy-test--one
(2)构建namesapce:
执行命令:kubectl create -f create_nginx_namespace.yaml
(3)查看namesapce:
执行命令:kubectl get namespaces
3、构建部署nginx服务:
(1)编写部署nginx服务的yaml:
Deployment经常会用来创建ReplicaSet和Pod,还支持常见的更新、扩容和缩容运维等操作。将ReplicaSet和Pod配置信息在yaml中编写好。然后再yaml后面配置上服务service的配置信息,最后将yaml文件上传到服务器中自定义文件夹内。示例如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
labels:
name: nginx-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: nginx-deployment
spec:
s:
- image: nginx
name: nginx-test
ports:
-Port: 80
name: port80
volumeMounts:
- mountPath: /etc/nginx/nginx.conf
name: config
- mountPath: /var/log/nginx/
name: log
- mountPath: /usr/share/nginx/lsy/area
name: lsy
volumes:
- name: config
hostPath:
path: /wocloud/soft/nginx/nginx.conf
- name: log
hostPath:
path: /wocloud/soft/nginx/log/
- name: lsy
hostPath:
path: /wocloud/soft/nginx/lsy/area
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
selector:
app: nginx-deployment
type: NodePort
ports:
- protocol: TCP
port: 8080
targetPort: 80
nodePort: 30048
说明:个人理解应该是一个deployment部署一个服务,对应配置一个service,如果一个大应用中是多个服务,那么就要在一个yaml中配置多个deployment和service。在service中选择deployment是通过service中:spec.selector.app,选择对应的deployment中:spec.template.metadata.labels.app。总之一个应用的服务除了namespace、dokcer-file以外的其它内容配置应该都在一个yaml,只需要通过k8s命令操作这个yaml即可完成对整个应用的维护。
注意:如果在一个yaml中定义多个deployment和service,那么对应的名称、端口号等参数需要进行修改,不要出现重复或者冲突。
(2)创建文件夹:
针对deployment中定义的volumes对应的path,构建对应的文件夹。
执行命令:mkdir -p /wocloud/soft/nginx/lsy/area/
执行命令:mkdir -p /wocloud/soft/nginx/log/
(3)创建nginx的conf:
创建nginx的conf文件,就是正常的配置nginx,并将文件放在yaml中配置的对应volumes的路径下。
(4)上传nginx部署项目:
将nginx中需要部署的项目上传到yaml中对应的volumes路径下。
(5)通过文件构建:
执行命令:kubectl create -f nginx_deployment.yaml
(6)查看pod列表:
执行命令:kubectl get pod -n namespace-lsy-test--one
说明:-n,是指定某个namespace。
(7)查看pod详情:
执行命令:kubectl describe pod/my-nginx-379829228-cwlbb
说明:最后一个参数是pod的名称。
(8)查看service列表:
执行命令:kubectl get service -n namespace-lsy-test--one
说明:-n,是指定某个namespace。
(9)查看service详情:
执行命令:kubectl describe service/nginx -n namespace-lsy-test--one
说明:-n,是指定某个namespace。
4、测试访问nginx:
(1)宿主机访问:
在宿主机中通过nodeIp:nodePort进行访问,执行命令:
curl 192.168.137.180:30018
(2)远程访问:
在同网段的其它服务器中访问k8s中部署的nginx服务,正常的话是在浏览器中可访问到nginx页面的。