【一起来学kubernetes】2、通过k8s创建tomcat服务

k8s创建服务步骤

1、定义服务的RC文件(RepliactionController)
2、将定义好的RC文件发布到k8s集群中
3、创建一个当前服务于kubernetes service关联的SVC文件
4、将定义好的SVC文件发布到k8s集群中

详细创建步骤与解析

1、创建tomcat对应的RC文件,我们将该文件命名为tomcat-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: tomcat
spec:
  replicas:
  selector:
    app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
        - name: tomcat
          image: tomcat
          ports: 
          - containerPort: 8080

2、将上面创建好的RC文件发布到k8s集群中,发布的命令如下
kubectl create -f tomcat-rc.yaml
发布完成后通过下面的命令来查看RC的状态信息
kubectl get rc
如果输出结果如下所示,则表示创建成功

NAME      DESIRED   CURRENT   READY     AGE
tomcat    1         1         1         1d

如果输出结果如下所示,则表示创建失败

NAME      DESIRED   CURRENT   READY     AGE
tomcat    1         0         0         1d

出现该创建失败的情况解决方案是:

  • 编辑 /etc/kubernetes/apiserver 配置文件中 KUBE_ADMISSION_CONTROL 配置项,删除 SecurityContextDeny,ServiceAccount 这两个配置参数,然后保存配置文件
  • 重启kube-apiserver
    systemctl restart kube-apiserver
  • 删除已创建RC
    kubectl delete -f tomcat-rc.yaml
  • 重新创建RC
    kubectl create -f tomcat-rc.yaml
    如果输出结果如下所示,而且一直都保持这样状态的话,则说明RC创建完成,但是创建Pod的过程异常
NAME      DESIRED   CURRENT   READY     AGE
tomcat    1         1         0/1       1d

出现该情况的话通过下面的命令来查看Pod的启动情况
kubectl get pods
如果输出的结果如下所示,则进一步表名是Pod创建过程异常造成的

NAME          READY     STATUS              RESTARTS   AGE
tomcat-asdfg   0/1       ContainerCreating   0          3s

出现该问题的处理方法如下所示:

  • 通过如下命令查看Pod启动的详细情况和异常情况
    kubectl describe pod tomcat-asdfg

  • 如果异常提示是由于缺失 /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt 文件造成的 registry.access.redhat.com/rhel7/pod-infrastructure:latest 镜像无法拉取到的话,只需要如下的处理

  • 通过yum命令安装缺失文件依赖的服务python-rhsm-certificates,安装命令如下:
    yum install -y *rhsm*

  • 通过docker命令手动拉取registry.access.redhat.com/rhel7/pod-infrastructure:latest 镜像,命令如下
    docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

  • 当镜像下载完成,Pod会自动进入Running状态

3、创建对应的Service服务,启对应的yaml文件命名为tomcat-svc.yaml,具体第一如下所示:

apiVersion: v1
kind: Service
metadata:
  name: tomcat
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort:10000
  selector:
    app: tomcat

4、将定义好的SVC文件发布到k8s集群中去,发布命令如下:
kubectl create -f tomcat-svc.yaml

5、查看SVC文件启动情况的命令如下:
kubectl describe svc tomcat
输入出结果如下:

Name:                   tomcat
Namespace:              default
Labels:                 
Selector:               app=tomcat
Type:                   NodePort
IP:                     10.252.5.157
Port:                    8080/TCP
NodePort:                30001/TCP
Endpoints:              182.18.0.1:8080
Session Affinity:       None
No events.

由于我们通过tomcat默认的页面来进行试验结果的验证,所以我们这里只能用8080端口作为内部服务的端口,因为tomcat默认的配置文件就是8080端口的,接下来,我们再虚拟机内网环境中就可以通过上面输出的ip:8080来查看tomcat欢迎页面啦
curl 'http://10.252.5.157:8080'

如果我们要在外网环境中访问该tomcat欢迎页面的话,首先需要你的本地虚拟机有外网IP,然后通过外网IP:30001即可进行访问
http://59.11.224.10:30001

结语

到目前为止,我们的第一个k8s应用就顺利启动啦,这已经迈出了学习k8s的第一步,在您实操的过程中如果有什么异常,可以在下面给留言,我们可以一起探讨学习

你可能感兴趣的:(kubernetes)