K8S发布应用步骤
k8s发布应用
环境:CentOS7.6
k8s版本: 1.8
非自有应用
1、只有一个主节点的情况,允许master部署pod
允许master节点部署pod
kubectl taint nodes --all node-role.kubernetes.io/master-
如果不允许调度
kubectl taint nodes master1 node-role.kubernetes.io/master=:NoSchedule
污点可选参数
NoSchedule: 一定不能被调度
PreferNoSchedule: 尽量不要调度
NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
2、k8s1.8版本的编排tomcat的文件,文件名:tomcat.yaml(随意取)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
spec:
selector:
matchLabels:
app: myweb
replicas: 2
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: docker.io/tomcat
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
ports:
- port: 8099
targetPort: 8080
nodePort: 31111
selector:
app: myweb
type: NodePort
在文件目录下执行:
kubectl apply -f tomcat.yaml
3、查看部署情况
kubectl get pods -o wide
4、如果部署失败了,查看失败原因
kubectl describe pods myweb-56c78c7775-mjjrd
自有应用
如果是自有的应用,需要编写Dockerfile ,步骤如下:
1、编写Dockerfile,文件名就叫Dockerfile,没有后缀
FROM openjdk:8-jdk-alpine
RUN mkdir -p /usr/local/myapp
COPY spring-boot-demo-1.0.jar /usr/local/myapp/myapp.jar
ENTRYPOINT ["java","-jar","/usr/local/myapp/myapp.jar"]
2、构建docker 本地镜像
docker build -t myapp:1.0 .
注意两点:
- 命令执行必须在Dockerfile文件同目录下
- 命令后面有个点
3、编写服务编排文件
名称随意,后缀yaml,我这里叫:myapp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
replicas: 1
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:1.0
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
ports:
- port: 8080
targetPort: 8080
nodePort: 31001
selector:
app: myapp
type: NodePort
nodePort是当spec.type=NodePort时,指定映射到物理机的端口号(浏览器访问用的)
targetPort是需要转发到后端的端口号(应用的)
port是Service监听的端口号
service具体属性含义如下表
属性名称 | 取值类型 | 是否必选 | 取值说明 |
---|---|---|---|
version | string | Required | v1 |
kind | string | Required | Service |
metadata | object | Required | 元数据 |
metadata.name | string | Required | Service名称,需符合RFC 1035规范 |
metadata.namespace | string | Required | 命名空间,不指定系统时将使用名为default的命名空间 |
metadata.labels[] | list | 自定义标签属性列表 | |
metadata.annotation[] | list | 自定义注解属性列表 | |
spec | object | Required | 详细描述 |
spec.selector[] | list | Required | Label Selector 配置,将选择具有指定Label标签的Pod作为管理范围 |
spec.type | string | Required | Service的类型,指定Service的访问方式,默认为ClusterIP。 (1)ClusterIP:虚拟服务IP地址,该地址用于Kubernetes集群内部的Pod访问,在Node上kube-proxy通过设置的iptables规则进行转发。 (2)NodePort:使用宿主机的端口,使能够访问各Node的外部客户端通过Node的IP地址和端口号就能访问服务。 (3)LoadBalancer:使用外接负载均衡器完成到服务的负载分发,需要在spec.status.loadBalancer字段指定外部负载均衡器的IP地址,同时定义nodePort和clusterIP,用于公有环境 |
spec.clusterIP | string | 虚拟服务的IP地址,当type=ClusterIP时,如果不指定,则系统进行自动分配,也可以手工指定;当type=LoadBalancer时,需要指定 | |
spec.sessionAffinity | string | 是否支持session,可选值为ClientIP,默认值为None。 ClientIP:表示将同一个客户端(根据客户端的IP地址决定)访问请求都转发到同一个后端Pod | |
spec.ports[] | list | Service端口列表 | |
spec.ports[].name | string | 端口名称 | |
spec.potrs[].protocol | string | 端口协议,支持TCP和UDP,默认值为TCP。 | |
spec.ports[].port | int | 服务监听的端口号 | |
spec.ports[].targetPort | int | 需要转发到后端Pod的端口 | |
spec.ports[].nodePort | int | 当spec.type=NodePort时,指定映射到宿主机的端口号 | |
status | object | 当spec.type=LoadBalancer时,设置外部负载均衡器的地址,用于公有云环境 | |
status.loadBalancer | object | 外部负载均衡器 | |
status.loadBalancer.ingress | object | 外部负载均衡器 | |
status.loadBalancer.ingress.ip | string | 外部负载均衡器的IP地址 | |
status.loadBalancer.ingress.hostname | string | 外部负载均衡器的主机名 |
执行命令:
kubectl apply -f myapp.yaml
如果报错,需要仔细检查格式,空格都不能错。
更多推荐
所有评论(0)