一个简单k8s发布tomcat应用的例子
首先:
部署好k8s集群。
比如我的环境:1master+2node
在这里插入图片描述
1、创建mysql-rc文件

[root@k8master tomcat]# vim mysql-rc.yaml 
apiVersion: v1
kind: ReplicationController   #副本控制器RC
metadata:
  name: mysql                       #RC名称,全局唯一
spec:
  replicas: 1                           #Pod副本期待的数量,目前是1副本。
  selector:
    app: mysql                         #符合目标的Pod拥有此标签
  template:                              #根据此模板创建Pod副本(实例)
    metadata:
      labels:
        app: mysql                    
    spec:
      containers:                               #Pod内容的定义部分
      - name: mysql                          #容器的名称
        image: mysql:5.6                   #容器对应的Docker镜像
        ports:
        - containerPort: 3306           #容器应用监听的端口号
        env:                            
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"

创建MYSQL RC文件后,发布mysql-rc

kubectl create -f mysql-rc.yaml
kubectl get rc			#查看所创建的RC
kubectl get pod			#查看Pod情况

2、创建mysql-svc

[root@k8master tomcat]# vim mysql-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
    - port: 3306
  selector:
    app: mysql

3、创建tomcat RC文件

[root@k8master tomcat]# vim myweb-rc.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
spec:
  replicas: 2     #这里是两副本,会在两个节点启tomcat web应用。
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: kubeguide/tomcat-app:v1
        ports:
        - containerPort: 8080

4、创建tomcat-svc

[root@k8master tomcat]# vim myweb-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30001
  selector:
    app: myweb

type=NodePort和nodePort=30001的两个属性,表明此service开启了NodePort方式外网访问模式。即暴露端口。
Service的虚拟IP是由Kubernetes虚拟出来的内部网络,外部是无法寻址到的。但是有些服务又需要被外部访问到,例如web前段。这时候就需要加一层网络转发,即外网到内网的转发。

5、检查下node,pod,rc,svc

[root@k8master tomcat]# kubectl get nodes
NAME        STATUS   ROLES    AGE     VERSION
k8smaster   Ready    master   7d      v1.19.3
k8snode1    Ready    <none>   6d21h   v1.19.3
k8snode2    Ready    <none>   7d      v1.19.3
[root@k8master tomcat]# kubectl get rc
NAME    DESIRED   CURRENT   READY   AGE
mysql   1         1         1       92m
myweb   2         2         2       83m
[root@k8master tomcat]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          7d
mysql        ClusterIP   10.111.33.137    <none>        3306/TCP         86m
myweb        NodePort    10.105.244.254   <none>        8080:30001/TCP   75m
[root@k8master tomcat]# 
[root@k8master tomcat]# kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
mysql-4s4td   1/1     Running   0          93m
myweb-5gngj   1/1     Running   0          84m
myweb-bt9hn   1/1     Running   0          84m

6、测试验证
浏览器:http://172.18.1.10:30001/
可以访问tomcat
0

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐