k8s创建服务步骤

null

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: <none>

Selector: app=tomcat

Type: NodePort

IP: 10.252.5.157

Port: <unset> 8080/TCP

NodePort: <unset> 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的第一步,在您实操的过程中如果有什么异常,可以在下面给留言,我们可以一起探讨学习