Kubernetes第二天
1.pod运行一个容器
1.创建目录
mkdir -p /manifests/pod
2.编写pod资源清单文件
vim 01-myweb.yaml
说明:
apiVersion:指的是Api的版本
metadata:资源的元数据
spec:用户期望的资源的运行状态
status:资源实际的运行状态
由于拉取远程镜像失败,这里使用本地部署的harbor的镜像
3.创建pod资源清单
kubectl create -f 01-myweb.yaml
4.查看资源
kubectl get pods -o wide
2.pod运行多个容器
1.编写资源清单
vim 02-nginx-tomcat.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx-tomcat
spec:containers:- name: nginximage: harbor.lxcedu.com/base-img/nginx:1.14.2- name: tomcatimage: harbor.lxcedu.com/base-img/tomcat:9-jre8-alpine
2.创建资源清单
kubectl create -f 02-nginx-tomcat.yaml
3.此时可以运行以下命令查看状态
kubectl describe pod nginx-tomcat
结果如图,这里截取部分信息
这个命令可以查看pod构建的容器的信息。
此时的容器属于同一个pod,共享ip。
3.容器使用宿主机网络
容器使用宿主机网络,相当于"docker run --network host"
spec:# 使用宿主机网络,相当于"docker run --network host"hostNetwork: true
4.由于容器没有阻塞,导致容器一直重启引发的故障的解决办法
containers:
# 给容器分配一个标准输入,默认值为false# stdin: true# 给容器分配一个启动命令,修改Dockerfile的CMD指令# args: ["tail","-f","/etc/hosts"]# 也可以修改command字段,相当于修改Dockerfile的ENTRYPOINT指令# command: ["sleep","15"]# args也可以和command命令搭配使用,和Dockfile的ENTRYPOINT和CMD效果类似command:- "tail"args:- "-f"- "/etc/hosts"
5.一个资源清单文件运行两个pod
apiVersion: v1
kind: Pod
metadata:name: nginx-multiple01
spec:containers:- name: nginximage: harbor.lxcedu.com/base-img/nginx:1.14.2---apiVersion: v1
kind: Pod
metadata:name: nginx-multiple02
spec:containers:- name: nginximage: harbor.lxcedu.com/base-img/nginx:1.14.2
6.故障案例一
pod清单如图所示
从图中可以得到这pod运行在同一个节点(k8s232),同时都使用了宿主机网络,导致第二个容器启动失败
可以直观看到这两个容器是由于端口占用是的第二个容器启动失败(两个nginx容器都占用了宿主机的80端口),但是实际生产环境可能无法通过清单文件看出来,所以此时需要进入到第二个启动失败的容器进行排查。
步骤一:修改清单文件,让第二个pod的容器保持启动状态
步骤二:创建资源清单并进入容器
kubectl apply -f 04-nginx-nginx.yaml
进入pod,由于只有一个容器,此处不需要指定容器,默认连接第一个容器
kubectl exec nginx-multiple02 -it -- sh (i是标准输入,t分配一个终端)
开始排查:
如图可以看出配置文件正确,端口被占用。