服务热线
135-6963-3175
小试牛刀
准备编排文件tomcat.yaml:(包含两部分,副本rc和service配置可为两个文件,不过我们此处合并为一个)
#rc副本相关 apiVersion: extensions/v1beta1 #表示Deployment调度配置 kind: Deployment metadata: #调度对象的全称,全局唯一 name: myweb spec: #pod副本数量 replicas: 2 #根据此模版创建pod实例 template: metadata: labels: #pod拥有的标签,对应RC的selector app: myweb spec: containers: - name: myweb image: docker.io/tomcat:8.5-jre8 ports: #tomcat容器的端口 - containerPort: 8080 #service相关,三个-表示区分两个配置 --- apiVersion: v1 kind: Service metadata: name: myweb spec: ports: - name: myweb-svc port: 8099 targetPort: 8080 #浏览器访问此服务的端口 nodePort: 31111 selector: app: myweb #表示这个服务是一个node节点的端口 type: NodePort
使用命令创建:
kubectl create -f tomcat01.yaml
若配置错了,创建了错误的service和pod可通过下面命令进行删除
kubectl delete -f tomcat01.yaml
查看pod是否创建成功并运行
kubectl get pods -o wide
[root@localhost k8s]# kubectl get pods NAME READY STATUS RESTARTS AGE myweb-209501739-drdkc 0/1 ContainerCreating 0 40s myweb-209501739-v26g9 0/1 ContainerCreating 0 40s #发现处于ContainerCreating并没有成功,我们执行下面命令查看原因 [root@localhost k8s]# kubectl describe pods myweb-209501739-drdkc Name: myweb-209501739-drdkc Namespace: default Node: 192.168.1.103/192.168.1.103 Start Time: Sun, 13 Sep 2020 12:34:49 +0800 Labels: app=myweb pod-template-hash=209501739 Status: Pending IP: Controllers: ReplicaSet/myweb-209501739 Containers: myweb: Container ID: Image: docker.io/tomcat:8.5-jre8 Image ID: Port: 8080/TCP State: Waiting Reason: ContainerCreating Ready: False Restart Count: 0 Volume Mounts: <none> Environment Variables: <none> Conditions: Type Status Initialized True Ready False PodScheduled True No volumes. QoS Class: BestEffort Tolerations: <none> Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 51s 51s 1 {default-scheduler } Normal Scheduled Successfully assigned myweb-209501739-drdkc to 192.168.1.103 <invalid> <invalid> 1 {kubelet 192.168.1.103} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\"" 1s <invalid> 3 {kubelet 192.168.1.103} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"
发现报了一个redhat-ca.crt: no such file or directory没找到文件的错误
此文件应该是用来连接主机master作凭证的吧,接下来下载这个凭证文件就是了。
在node节点机192.168.1.103上,执行以下命令: 1、wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm 2、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 3、docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
此时再查看pod状态
[root@localhost k8s]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE myweb-209501739-drdkc 0/1 ContainerCreating 0 11m <none> 192.168.1.103 myweb-209501739-v26g9 1/1 Running 0 11m 172.17.0.2 192.168.1.103
发现正在调度,第二个已经成功了,再等待...再看....
[root@localhost k8s]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE myweb-209501739-drdkc 1/1 Running 0 12m 172.17.0.3 192.168.1.103 myweb-209501739-v26g9 1/1 Running 0 12m 172.17.0.2 192.168.1.103
发现两个已经启动成功。并且被分配到了103节点上
此时我们通过浏览器访问:
发现已经可以正常访问。
⚠️注意:若出现404可能是tomcat镜像原因。若出现不能访问请检查防火墙iptables是否关闭。
我们在103上查看进程
[root@localhost ~]# ps -ef|grep tomcat root 49665 49649 0 12:46 ? 00:00:02 /usr/local/openjdk-11/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start root 49912 49897 0 12:46 ? 00:00:02 /usr/local/openjdk-11/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start root 54387 47603 0 12:53 pts/0 00:00:00 grep --color=auto tomcat
然后测试下在103上kill掉进程会不会重新创建
[root@localhost ~]# kill -9 49665 [root@localhost ~]# kill -9 49912 [root@localhost ~]# ps -ef|grep tomcat root 56453 47603 0 12:56 pts/0 00:00:00 grep --color=auto tomcat
...等待
[root@localhost ~]# ps -ef|grep tomcat root 56584 56567 36 12:57 ? 00:00:01 /usr/local/openjdk-11/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start root 56703 47603 0 12:57 pts/0 00:00:00 grep --color=auto tomcat
在102 master上查看
[root@localhost k8s]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE myweb-209501739-drdkc 0/1 Error 0 22m 172.17.0.3 192.168.1.103 myweb-209501739-v26g9 0/1 Error 0 22m 172.17.0.2 192.168.1.103 [root@localhost k8s]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE myweb-209501739-drdkc 0/1 Error 0 22m 172.17.0.3 192.168.1.103 myweb-209501739-v26g9 1/1 Running 1 22m 172.17.0.2 192.168.1.103 [root@localhost k8s]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE myweb-209501739-drdkc 1/1 Running 1 22m 172.17.0.3 192.168.1.103 myweb-209501739-v26g9 1/1 Running 1 22m 172.17.0.2 192.168.1.103
发现刚开始两个都Error状态,后面又都恢复成Running状态,说明k8s又自动创建了pod维持了我们指定的2个的副本数量。