使用Kubernetes创建Tomcat容器的步骤:
1 、定义服务的RC文件(RepliactionController)
2、将定义好的RC文件发布到k8s集群中
3、创建一个当前服务于kubernetes service关联的SVC文件
4、将定义好的SVC文件发布到k8s集群中
1、关闭CentOS防火墙
systemctl disable firewalld
systemctl stop firewalld
2、更新yum
yum update
3、安装etcd和kubernets
etcd是一个高可用的分布式键值(key-value)数据库,etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。
yum install -y etcd kubernets
4、启动服务
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
如果docker启动失败,请参考(vi /etc/sysconfig/selinux 把selinux后面的改为disabled,重启
一波机器,再重启docker就可以了)
1、创建Tomcat对应的RC文件,命名为mytomcat-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mytomcat
spec:
replicas: 2
selector:
app: mytomcat
template:
metadata:
labels:
app: mytomcat
spec:
containers:
- name: mytomcat
image: tomcat:7-jre7
ports:
- containerPort: 8080
2、将创建好的RC文件发布到k8s集群中
kubectl create -f mytomcat-rc.yaml
然后通过以下命令查看RC的状态信息
kubectl get rc
结果如下,表示创建成功
NAME DESIRED CURRENT READY AGE
mytomcat 1 1 1 1d
结果如下,表示创建失败
NAME DESIRED CURRENT READY AGE
mytomcat 1 0 0 1d
创建失败的话,解决方案如下:
编辑 /etc/kubernetes/apiserver 配置文件中 KUBE_ADMISSION_CONTROL 配置项,删除 SecurityContextDeny,ServiceAccount 这两个配置参数,然后保存配置文件
重启kube-apiserver
systemctl restart kube-apiserver
kubectl delete -f tomcat-rc.yaml
kubectl create -f tomcat-rc.yaml
如果输出结果如下所示,而且一直都保持这样状态的话,则说明RC创建完成,但是创建Pod的过程异常
NAME DESIRED CURRENT READY AGE
mytomcat 1 1 0/1 1d
出现该情况的话通过下面的命令来查看Pod的启动情况
kubectl get pods
如果输出的结果如下所示,则进一步表明是Pod创建过程异常造成的
NAME READY STATUS RESTARTS AGE
mytomcat-3vr92 0/1 ContainerCreating 0 24m
mytomcat-t7jhd 0/1 ContainerCreating 0 24m
出现该问题的处理方法如下所示:
1、通过如下命令查看Pod启动的详细情况和异常情况
kubectl describe pod mytomcat-3vr92
如果异常提示是由于缺失 /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt 文件造成的 registry.access.redhat.com/rhel7/pod-infrastructure:latest 镜像无法拉取到的话,只需要如下的处理
2、通过yum命令安装缺失文件依赖的服务python-rhsm-certificates,安装命令如下:
yum install -y *rhsm*
3、通过docker命令手动拉取registry.access.redhat.com/rhel7/pod-infrastructure:latest 镜像,命令如下
docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
当镜像下载完成,Pod会自动进入Running状态
http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
1、创建对应的Service服务,命名为mytomcat-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mytomcat
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30002
selector:
app: mytomcat
2、将定义好的SVC文件发布到k8s集群中,命令如下:
kubectl create -f mytomcat-svc.yaml
3、查看SVC文件启动情况命令如下:
kubectl describe svc mytomcat
输出结果如下:
Name: mytomcat
Namespace: default
Labels: <none>
Selector: app=mytomcat
Type: NodePort
IP: 10.254.72.123
Port: <unset> 8080/TCP
NodePort: <unset> 30002/TCP
Endpoints: 172.17.0.2:8080,172.17.0.3:8080
Session Affinity: None
No events.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x4ZRmKnd-1593176391291)(assets/1593174473066.png)]
访问地址: http://192.168.19.121:30002/
结果如下则表示服务创建成功
如果出现下面的结果,则表示tomcat出现问题:
1、进入创建的Tomcat容器当中
docker exec -it 668343b0fd55(容器id) /bin/bash
2、查看当前目录文件,并且进入webapps文件夹中
ls -l
显示total 0,问题就出在这里,webapps文件夹下没有东西
3、将 webapps.dist文件夹下的内容复制到给webapps文件夹
mv webapps.dist webapps
4、重新访问tomcat,成功
当中
docker exec -it 668343b0fd55(容器id) /bin/bash
2、查看当前目录文件,并且进入webapps文件夹中
ls -l
显示total 0,问题就出在这里,webapps文件夹下没有东西
3、将 webapps.dist文件夹下的内容复制到给webapps文件夹
mv webapps.dist webapps
4、重新访问tomcat,成功