K8s笔记1----入门基础与fannel网络

1.k8s网络通信方式(一个node还是一个docker服务,只有一个docker0路由器,会有flannel0在监听docker0,一个node多个pod的时候由本机的dokcer0分配每一个podIP地址

1.k8s网络模型假设所有的pod都在一个可以直接联通的扁平的网络空间里面,在google compute engine 里面是现成的的网络模型。k8s假设这个网络已存在。而在私有云里面搭建k8s集群这个集群式不存在的,需要自己的实现这个网络,将不同节点pod里面的docker容器相互打通,然后运行k8s。
2.
a.同一个pod里面的容器共用一个叫pause的路由器容器,其他容器都挂载这里。个人理解pod这个节点默认内嵌了docker守护进程的所有服务
b.各个pod之间的通行:overlay network
c.pod和service之间的通信:各界蒂娜的ipTable

3.flannel服务:是coreOS团队提供的网络规划服务,能让集群的不同节点nod里面的容器(docker容器)在整个集群有唯一的虚拟ip地址,这样就在整个集群建立一覆盖网络
如下图
两个物理机node里面有两个pod,每个pod里面有自己各种容器服务(例如mysql,apache等后端服务)。app1,app2,app3是后端应用开发,backend是前端。。

跨主机的通信数据包会被flannel封装在nod这一层的网络给转发到对应的nod上,具体pod的ip
在这里插入图片描述
在这里插入图片描述
进入lqh-svc-dm1-54bc5d8f46-5rg45这个pod下的两个容器安装ip addr指令,查看ip是都和和pod的ip一样,且mac地址一样,看出他们共用一个网络协议栈在这里插入图片描述不同的网络节点网络:node网络真实的物理机网络pod网络:上面讲的网络都是在讲pod网络,所有节点node的所有pod的所有的docker容器在一个扁平化网络上通信,这个是pod网络
service网络:是在不同pod之间划分的逻辑单位概念,在这个层面讲的网络是service网络
在这里插入图片描述
这里的网络通信需要联系安装k8s时初始化主节点安装flannel和查看pod信息时

2.k8s安装

见个人有道云笔记个人安装教程

3.什么是service deployment

service是一个对pod的抽象逻辑概念,里面可以有很多歌docker容器,由这些容器底层做服务,因为pod是临时的,可以随时放弃,但是pod摧毁后ip会变,但是对外的话ip变了就会造成访问不到原来的“服务"了,所以要用到service这个概念,对外的话可以通过service的名字访问对应的pod服务
service根据Pod的标签关联到pod,是为了让外部访问到pod,给pod做负载均衡

deployment根据Pod的标签关联到Pod,是为了管理pod的生命周期

1.service的实现是通过kube-proxy来实现的

kube-proxy当前实现了三种代理模式:userspace, iptables, ipvs

三种模式的对比以及代理原理参考

Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。
Namespace常用来隔离不同的用户,比如Kubernetes自带的服务一般运行在kube-system namespace中。

Kubernetes中的名称空间与docker中的网络空间不同。K8s中的名称空间只是做了一个逻辑上的隔离

3.kubectl指令使用认识k8s

1.kubectl run 示例(新建了一个容器也是新建了一个pod),新建一个由多个容器的pod好像不能用run指令,只能用资源清单yaml文件,一般没人用run来启动pod的
默认挂载在名字为default的命名空间
在这里插入图片描述

在这里插入图片描述

进入某一个pod的一个容器(一个pod里面的容器共享一个linux协议栈)

lqhpod15是一个有两个容器的pod,
指令格式:kubectl exec -it podName -c containerName -n namespace – shell comand
在这里插入图片描述

.kubectl exec 进入一个pod里面ping不同命名空间的ip也能ping通,不是进入pod里面容器
在这里插入图片描述
由下图知道,实实在在有操作系统指令还是容器,而不是pod,只是pod有自己逻辑机器的ip,fannel分配的,作为一个被管理的逻辑机器
在这里插入图片描述

资源清单手写pod运行

1.不会写yaml文件声明资源清单的时候使用explain指令查看信息
根据yaml的层级结构可以在后面加点解析,例如想查看pod这种资源类型下的metadata的labels代表啥意思
kubectl explain pod.metadata 就会出现meadata下所有属性的解析包括labels
2.labels作用
Label机制是K8S中一个重要设计,通过Label进行对象弱关联,灵活地分类和选择不同服务或业务,让用户根据自己特定的组织结构以松耦合方式进行服务部署。例如可以给新建的pod贴标签

2.kubectl get ns # 查看k8s上所有的namespace

kubectl create ns pingpang # 创建新的namespace “pingpang”

3.vim pod01.yaml手写yaml资源清单

  
apiVersion: v1  #指定k8s的官方接口版本,目前就只有v1,这个是这个yaml文档使用服务接口
kind: Pod #指定这个yaml文件是一个Pod数据类型
metadata:
  name: pod01 #这个pod的名字
  labels: #给这个pod贴标签
    app: pod01-label
    version: v2 #给这个pod定义一个版本
  namespace: space01  #声明一个新的命名空间

spec: #详细定义这个yaml资源的内容specific具体的单词缩写
  containers: #指定这个pod的容器 下面的中横杠是表示yaml格式的数组
  - name: redis01 #容器名
    image: redis  #镜像名字
    imagePullPolicy: IfNotPresent # 指定拉取镜像的策略,默认是Always,每次尝试拉去新的, IfNotPresent表示每本的的再去拉
    ports: #用到的端口列表
    - name: t81
      containerPort: 81 #没指定hostPort就是和containerPort一样
    - name: t6379
      containerPort: 6379 #监听的端口列表
      hostPort: 6379 #需要用到的pod这个逻辑资源主机的端口,不和这个pod其他的容器重复

  - name: nginx01  #容器名
    image: nginx  #镜像名字
    imagePullPolicy: IfNotPresent # 指定拉取镜像的策略,默认是Always,每次尝试拉去新的, IfNotPresent表示每本的的再去拉
    ports: #用到的端口列表
    - name: t80
      containerPort: 80 #监听的端口列表
      hostPort: 80 #需要用到的pod这个逻辑资源主机的端口,不和这个pod其他的容器重复
    - name: t6381
      containerPort: 6381
      # containerPort: 80 #监听的端口列表
    #  hostPort: 80 #需要用到的pod这个逻辑资源主机的端口,不和这个pod其他的容器重复
~
~
~
~

在这里插入图片描述
4.新建的命名空间space1不能部署pod如下图
在这里插入图片描述

把yaml文件的端口有关的注释掉去掉就好了

apiVersion: v1  #指定k8s的官方接口版本,目前就只有v1,这个是这个yaml文档使用服务接口
kind: Pod #指定这个yaml文件是一个Pod数据类型
metadata:
  name: pod04  #这个pod的名字
  labels: #给这个pod贴标签
    app: pod01-label
    version: v2 #给这个pod定义一个版本
  # namespace: space01  #声明一个新的命名空间

spec: #详细定义这个yaml资源的内容specific具体的单词缩写
  containers: #指定这个pod的容器 下面的中横杠是表示yaml格式的数组
    - name: redis01 #容器名
      image: redis  #镜像名字
      imagePullPolicy: IfNotPresent # 指定拉取镜像的策略,默认是Always,每次尝试拉去新的, IfNotPresent表示每本的的再去拉

    - name: nginx01  #容器名
      image: nginx  #镜像名字
      imagePullPolicy: IfNotPresent # 指定拉取镜像的策略,默认是Always,每次尝试拉去新的, IfNotPresent表示每本的的再去拉
~
~
~kube
~

在这里插入图片描述
注意同一中镜像的启动两次后,会出现端口冲突,pod启动后逻辑上相当于一个逻辑主机,里面的容器和这个逻辑主机作端口映射是不可以冲突的,逻辑主机的端口就一个。
在这里插入图片描述

5.kubectl apply -f pod04.yaml 按照一个资源清单启动一个pod
6. kubectl describe pod lqhpod4 -n space01 查看pod的运行情况,新建失败原因
发现一个pod用同一个镜像启动两个容器映射到pod两个不同的hostport端口报错:(pod没有这些端口提供给yaml端口映射)
Warning FailedScheduling 9h (x519 over 2d6h) default-scheduler 0/3 nodes are available: 1 node(s) had taints that the pod didn’t tolerate, 2 node(s) didn’t have free ports for the requested pod ports.
在这里插入图片描述

在这里插入图片描述

由pod的分类知道什么是控制器

Pod 的分类
自主式 Pod:Pod 退出了,此类型的 Pod 不会被创建

控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值