kubernetes

kubernetes学习笔记-pod学习

一、核心概念

从本章开始逐步介绍kubernetes中的基础概念概念和核心概念,基础概念包括:namespace,labels,annotations,pods,volumes等;核心概念包含kubernetes中各种controller,包含以下几种

  • 应用副本控制器有:Deployments,ReplicaSets,DaemonSets,StatefulSets
  • 批处理任务控制器Jobs和CronJob
  • 存储控制器PersistentVoloume,PersistentVolumeClaim,StorageClass
  • 服务负载均衡Service,Ingress,NetworkPolicy和DNS名称解析
  • 配置和密钥ConfigMaps和Secrets

pod开始讲解,后续逐步介绍应用部署,存储,负载均衡等相关的控制器,kubernetes内部由多个不同的控制器组成,每个控制器完成不同的功能

1.1.pod与容器区别

Pods是kubernetes中最小的调度单位,Pods内运行一个或者多个container,container之间共享pod的网络ip资源,存储volume资源,计算等资源,方便pod内部的container之间能够实现快速的访问和交互,Pod的使用方式通常包含两种:

  • Pod中运行一个容器,最经常使用的模式,container封装在pod中调度,两者几乎等同,但k8s不直接管理容器
  • Pod中运行多个容器,多个容器封装在pod中一起调度,适用于容器之间有数据交互和调用的场景,如app+redis,pod内部共享相同的网络命名空间,存储命名空间,进程命名空间等

1.2.创建pod

kubernetes交互的方式通常分为四种

  • 命令行,kubectl和kubernetes交互,完成资源的管理,命令行入门简单,但只能支持部分资源创建
  • YAML,通过易于理解的YAML文件格式,描述资源的定义,功能最丰富,最终转换为json格式
  • SDK,提供各种语言原生的SDK,实现各种语言编程接入
  • API,通过resfulAPI以http的方式和kubernetes交互,适用于基于API做二次开发

1、编写yaml文件,定义一个pod资源
cat nginx.yaml

apiVersion: v1
kind: Pod
metadata: 
  name: nginx-demo
  labels:
    name: nginx-demo
spec:
  containers:
  - name: nginx-demo
    image: nginx:1.7.9
    imagePullPolicy: IfNotPresent
    ports:
    - name: nginx-port-80
      protocol: TCP
      containerPort: 80

配置文件参数说明

  • apiVersion api使用的版本,kubectl api-versions可查看到当前系统能支持的版本列表
  • kind 资源类型
  • metadata 指定Pod的元数据,metadata.name指定名称,metadata.labels指定Pod的所属的标签
  • spec 指定Pod的模版属性,spec.containers配置容器的信息,spec.containers.name指定名字,spec.containers.image指定容器镜像的名称,spec.containers.imagePullPolicy是镜像的下载方式,IfNotPresent表示当镜像不存在时下载,spec.containers.ports.name指定port的名称,spec.containers.ports.protocol协议类型为TCP,spec.containers.ports.containerPort为容器端口

kubectl apply -f nginx.yaml
kubectl get pods -o wide

NAME                              READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx-app-demo-7bdfd97dcd-6fzzq   1/1     Running   0          27h   10.244.2.12   node-3   <none>           <none>
nginx-app-demo-7bdfd97dcd-hmdhm   1/1     Running   0          27h   10.244.1.13   node-2   <none>           <none>
nginx-app-demo-7bdfd97dcd-lzx2c   1/1     Running   0          27h   10.244.1.15   node-2   <none>           <none>
nginx-app-demo-7bdfd97dcd-plp5w   1/1     Running   0          27h   10.244.2.13   node-3   <none>           <none>
nginx-app-demo-7bdfd97dcd-wwzbn   1/1     Running   0          27h   10.244.1.12   node-2   <none>           <none>
nginx-demo                        1/1     Running   0          28m   10.244.2.17   node-3   <none>           <none>

curl 10.244.2.17

前面我们我们学习过kubernetes支持滚动升级RollingUpdate,弹性扩容replicas等特性,如何给Pod做滚动升级保障业务不中断,如何提高Pod的副本个数保障高可用呢?答案是:不支持。Pod是单个,无法支持一些高级特性,高级特性需要通过高级的副本控制器如ReplicaSets,Deployments,StatefulSets,DaemonSets等才能支持。Pod在实际应用中很少用,除了测试和运行一些简单的功能外,实际使用建议使用Deployments代替,Pod的定义以Template的方式嵌入在副本控制器中

那么如何去编写yaml文件呢
有两个命令可以帮助编写
kubectl create deployment demo --image=nginx:latest --dry-run -o yaml该命令会输出一个模板yaml文件,不会在集群上运行
kubectl explain Pods.spec.containers该命令可以查看相关参数的意义

支付宝扫码打赏 微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章

linuxwt's Picture
linuxwt

我叫王腾,来自武汉,2016年毕业后在上海做了一年helpdesk,自学了linux后回武汉从事系统运维的工作,从2017年开始写博客记录自己的学习工作,现在正在进行数据迁移到此博客,目前就职于中国移动设计院有限公司,个人的座右铭是:逃脱舒适区才能在闲暇的时候惬意的玩耍。

武汉光谷 https://linuxwt.com

Subscribe to 今晚打老虎

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!

Comments