Kubernetes探索学习003--关于Kubernetes的Pod

关于Pod

关于Pod我们要慢慢去体会去接受它去使用它,尤其是运维人员这块需要从逻辑上形成认识,首先理解Pod是Kubernetes项目的原子调度单位。为什么是Pod而不是单个DockerContainer?因为“容器设计模式”,一种把容器组合起来使用的方法模式。用大脑去想象,单个DockerContainer是未来云计算系统中的进程,容器镜像是系统中形形色色的安装包,Kubernetes是这个系统。Pod作为一个逻辑抽象概念,可以想成是这个系统上的虚拟机,我们难道不应该掌握虚拟机的使用方法吗?

1.具体实践

1.Pod级别俩个容器共享一个Volume的例子

1.编写YAML文件
[root@kubernetes01 ~]# cat two-container.yaml
apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:
  restartPolicy: Never
  volumes:
  - name: shared-data
    hostPath:
      path: "/home/data/kubernetes/shared-data"
  containers:
  - name: nginx-container-01
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html
  - name: debian-container-01
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Welcome to debian container > /pod-data/index.html"]

2.启动之后查看pod信息
[root@kubernetes01 ~]# kubectl describe pod two-containers
Name:               two-containers
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               kubernetes02/10.5.0.207
Start Time:         Mon, 11 Mar 2019 14:59:58 +0800
Labels:             <none>
Annotations:        kubectl.kubernetes.io/last-applied-configuration:
                      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"two-containers","namespace":"default"},"spec":{"containers":[{"image"...
Status:             Running
IP:                 10.44.0.3
Containers:
  nginx-container-01:
    Container ID:   docker://00373fd44ec787b57c373e3bb8bc9869ae0706630d7f34f786f8c5ae2d896af2
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:98efe605f61725fd817ea69521b0eeb32bef007af0e3d0aeb6258c6e6fe7fc1a
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Mon, 11 Mar 2019 15:00:17 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /usr/share/nginx/html from shared-data (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-8j8dl (ro)
  debian-container-01:
    Container ID:  docker://a95c3d84fc0b3cce966f3db53a97f7d3681f723c5aa83dadbfc2ddf9b7be677f
    Image:         debian
    Image ID:      docker-pullable://debian@sha256:72e996751fe42b2a0c1e6355730dc2751ccda50564fec929f76804a6365ef5ef
    Port:          <none>
    Host Port:     <none>
    Command:
      /bin/sh
    Args:
      -c
      echo Welcome to use debian container > /pod-data/index.html
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 11 Mar 2019 15:00:37 +0800
      Finished:     Mon, 11 Mar 2019 15:00:37 +0800
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /pod-data from shared-data (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-8j8dl (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  shared-data:
    Type:          HostPath (bare host directory volume)
    Path:          /home/data/kubernetes/shared-data
    HostPathType:  
  default-token-8j8dl:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-8j8dl
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age   From                   Message

----    ------     ----  ----                   -------
  Normal  Scheduled  117s  default-scheduler      Successfully assigned default/two-containers to kubernetes02
  Normal  Pulling    117s  kubelet, kubernetes02  pulling image "nginx"
  Normal  Pulled     98s   kubelet, kubernetes02  Successfully pulled image "nginx"
  Normal  Created    98s   kubelet, kubernetes02  Created container
  Normal  Started    98s   kubelet, kubernetes02  Started container
  Normal  Pulling    98s   kubelet, kubernetes02  pulling image "debian"
  Normal  Pulled     78s   kubelet, kubernetes02  Successfully pulled image "debian"
  Normal  Created    78s   kubelet, kubernetes02  Created container
  Normal  Started    78s   kubelet, kubernetes02  Started container

3.访问测试
这块儿nginx镜像默认是80端口
so
[root@kubernetes01 ~]# curl 10.44.0.3
Welcome to debian container

2.挂载war包到tomcat中的例子

1.编写YAML文件
[root@kubernetes01 ~]# cat java-web-001.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: java-web-001
spec:
  initContainers:
  - image: registry:5000/jenkins:v2
    name: war
    command: ["cp","/jenkins.war","/app"]
    volumeMounts:
    - name: java-test001-volume
      mountPath: "/app"
  containers:
  - image: tomcat:latest
    name: tomcat
    volumeMounts:
    - name: java-test001-volume
      mountPath: "/usr/local/tomcat/webapps"
    ports:
    - containerPort: 8080
      hostPort: 8004
  volumes:
  - name: java-test001-volume
    emptyDir: {}

2.启动之后通过kubectl describe pod java-web-001无报错,访问测试
[root@kubernetes01 ~]# curl 10.40.0.7:8080/jenkins/
<html><head><meta http-equiv='refresh' content='1;url=/jenkins/login?from=%2Fjenkins%2F'/><script>window.location.replace('/jenkins/login?from=%2Fjenkins%2F');</script></head><body style='background-color:white; color:white;'>


Authentication required
<!--
You are authenticated as: anonymous
Groups that you are in:
  
Permission you need to have (but didn't): hudson.model.Hudson.Administer
-->

</body></html>
                                                      
当然也可以直接在浏览器中访问节点IP的URL来测试。这块jenkins的war包镜像是直接把war包放在了busybox标准镜像的根目录下,tomcat用的是标准镜像。用initContainer优先运行WAR包镜像,这种模式叫做sidecar!解决的俩者之间的耦合问题!

这块儿需要强调下,研究Kubernetes之前需要具备一些docker的基础知识,比如Dokerfile的基本编写规则,本地docker仓库怎么搭建,以及一些docker常用命令。

关于Dockerfile的常用字段描述,帮你回忆一下
FROM 基础镜像
MAINTAINER 维护者信息
RUN 想要执行的命令
ADD copy文件到镜像中
WORKDIR 当前工作目录
VOLUME 目录挂载
EXPOSE 端口设置
RUN 运行进程
2.感悟总结

要去理解Pod实现的原理,Pod其实是一组共享了某些资源的容器,还有就是sidecar这种玩法儿,值得回味!明确一点,一个容器就是一个进程!Pod提供的是一种容器编排的思想!

3.遇到的问题

Back-off restarting failed container的问题,这种问题需要追本溯源去查,如果遇到就去刨根问底,你一定会发现问题的所在!有时候你去某某群里请教大佬们,大佬们也不一定能立马解决你的问题,所以谨慎细心提高自己解决问题的能力才是关键所在!
特别感谢张磊老师,感谢他的精品课! 深入刨析K8s.jpeg
听君一席话,胜读十年书。?
PS:文中服务器使用的是国内某☁️的机器
欢迎大家留言讨论,欢迎大家和我一起学习?~~~

转载于:https://www.cnblogs.com/jason007/p/10537295.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值