第144天学习打卡( Kubernetes DaemonSet k8s集群组件 k8s的核心概念)

Posted doudoutj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第144天学习打卡( Kubernetes DaemonSet k8s集群组件 k8s的核心概念)相关的知识,希望对你有一定的参考价值。

DaemonSet

DaemonSet确保全部(或者一些)Node上运行一个Pod的副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除Daemonet将会删除它创建的所有Pod。

使用DaemonSet的一些典型的用法:

  • 运行集群存储daemon,例如在每个Node上运行glusterd、ceph。
  • 在每个Node上运行日志收集daemon, 例如fluentd、logstash。
  • 在每个Node上运行监控daemon,例如Prometheus Node Exporter

Job

负责批处理任务,即仅执行一次的任务, 它保证批处理任务的一个或多个Pod成功结束

Cron Job

Cron Job管理基于时间的Job,即:

  • 在给定时间点只运行一次
  • 周期性地在给时间点运行

服务发现

image-20210601202441327

网络通讯模式-1

kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(Google Compute Engine)里面是现成的网络模型,Kubernetes假定这个网络已经存在。而私有云里搭建Kubernetes集群,就不能假定这个网络已经存在了,我们需要自己实现这个网络假设,将不同节点上的Docker容器之间的互相访问先打通,然后运行Kubernetes。

网络通讯模式-2

同一个Pod内的多个容器之间:lo

各Pod之间的通讯:Overlay Network

Pod与Service之间的通讯:各节点的Iptables规则。

网络解决方案 Kubernetes + Flannel -1

Flannel是CoreOS团队针对K8S设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。而且它还能在这些IP地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动的传递到目标容器内。

ETCD之Flannel 提供说明:

存储管理Flannel可分配的IP地址段资源

监控ETCD中每个Pod的实际地址,并在内存中建立维护Pod节点路由表

不同情况下网络通信方式

同一个Pod内部通讯:同一个Pod共享一个网络命名空间,共享同一个Linux协议栈

Pod1和Pod2

  • Pod1与Pod2不在同一台主机,Pod的地址是与docker0在同一个网段的,但docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行。将Pod的IP和所在Node的IP关联起来,通过这个关联让Pod可以互相访问
  • Pod1与Pod2在同一台机器,由Docker0网桥直接转发请求至Pod2,不需要经过Flannel

Pod至Service的网络:目前基于性能考虑,全部为iptables维护和转发

Pod到外网:Pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后,iptables执行Masquerade,把源IP更改为宿主网卡的IP,然后向外网服务器发送请求

外网访问Pod: Service

组件通讯示意图

image-20210601211649482

K8s集群架构组件

image-20210601150604849

  • Master(主控节点) 和node(工作节点)
  • (1)Master组件
    • apiserver: 集群统一入口,以restful方式,交给etc存储
  • scheduler
    • 节点调度,选择node节点应用部署
  • controller-manager
    • 处理集群中常规后台任务,一个资源对应一个控制器
  • etcd
    • 存储系统,用于保存集群相关的数据
  • (2)node组件
  • kubeelet
    • master派到node节点代表,管理本机容器
  • kube-proxy
    • 提供网络代理,负载均衡等操作

K8s核心概念

1.Pod

  • 最小部署单元
  • 一组容器的集合
  • 共享网络
  • 生命周期是短暂的

2.controller

  • 确保预期的pod副本数量
  • 无状态应用部署
  • 有状态应用部署(需要特定的条件才可以使用)
  • 确保所有的node运行同一个pod
  • 一次性任务和定时任务

3.service

  • 定义一组pod的访问规则

1.搭建k8s环境平台的规划

平台规划

单master集群

image-20210601153153520

多master集群

image-20210601153333713

2.服务器硬件配置要求

测试环境:

image-20210601153547944

生成环境:更高要求

3.搭建k8s集群部署方式

1.前置知识

目前生产部署kubernetes集群主要有两种方式:

(1)kubeadm

Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join用于快速部署kubernetes集群,这个工具能通过两条指令完成kubernetes集群的部署:

第一,创建一个Master节点 kubeadm init

第二,将Node节点加入到当前集群中 $kubeadm join <Master 节点的IP和端口>

安装要求

在开始之前,部署k8s集群机器需要满足一下几个条件:

– 一台或者多台机器,操作系统CentOS7.x-84_x64

– 硬件配置:2GB或更多RAM, 2个CPU或者更多CPU,硬盘30GB或更多

– 集群中所有机器之间网络互通

– 可以访问外网,需要拉取镜像

– 禁止swap分区

image-20210601161400842

image-20210601161731090

image-20210601162113327

image-20210601162207318

image-20210601162612313

image-20210601162657869

image-20210601162843066

image-20210601162939861

image-20210601163108245

image-20210601163203825

image-20210601163627245

image-20210601163716686

image-20210601163807198

image-20210601163830848

image-20210601163903836

按照以上步骤创建另外两个node节点:

image-20210601164348564

使用这个在一个命令行输入的,三个窗口都会同时执行

image-20210601165109276

image-20210601165159936

#关闭防火墙
 systemctl stop firewalld  #临时关闭
 systemctl disable firewalld #永久关闭
 
 #关闭selinux
 sed -i 's/enforcing/disabled/' /etc/selinux/config #永久
 setenforce 0 #临时
 
 #关闭swap
 swapoff -a #临时
 sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
 
 #根据规划设置主机名
 hostnamectl set-hostname <hostname>
 
 #在master添加hosts
 cat >> /etc/hosts << EOF
 47.108.210.65 k8smaster
 47.108.224.103 k8snode1
 47.108.212.219 k8snode2
 EOF
 
 # 将桥接的IPV4流量传递到iptables的链
 cat > /etc/sysctl.d/k8s.conf << EOF
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 EOF
 sysctl --system #生效
 #时间同步
 
 yum install ntpdate -y
 ntpdate time.windows.com

image-20210601183105588

(三个端口都要执行这个命令)

#1.卸载旧的版本
 yum remove docker \\
                  docker-client \\
                  docker-client-latest \\
                  docker-common \\
                  docker-latest \\
                  docker-latest-logrotate \\
                  docker-logrotate \\
                  docker-engine
  # 2.需要的安装包
  yum install -y yum-utils
  # 3.设置镜像的仓库
  yum-config-manager \\
    --add-repo \\
    https://download.docker.com/linux/centos/docker-ce.repo
  
 # 建议安装阿里云 
  yum-config-manager \\
    --add-repo \\
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#4更新yum软件包索引
 yum makecache fast


# 5安装docker相关的内容   docker-ce 社区   ee企业版
 yum install -y docker-ce docker-ce-cli containerd.io
 #6 启动docker
 systemctl start docker
 #7.使用 docker version 查看是否安装成功


# 8 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://g6yrjrwf.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


添加阿里云YUM软件源(三个端口都要执行这个命令)

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubeadm, kubelet和kubectl(三个端口都要执行这个命令)

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet  #开机启动

部署Kubernetes Master(注意这个命令只能在master里面执行 前面的命令三个端口都要执行)

kubeadm init \\
--apiserver-advertise-address=47.108.210.65 \\
--image-repository registry.aliyuncs.com/google_containers \\
--kubernetes-version 1.21.1-0 \\
--service-cidr=10.96.0.0/12 \\ #(这个ip和自己的Ip不冲突就行)
--pod-network-cidr=10.244.0.0/16#(这个ip和自己的Ip不冲突就行)

kubeadm init \\
--apiserver-advertise-address=47.108.210.65 \\
--image-repository registry.aliyuncs.com/google_containers \\
--kubernetes-version 1.21.1-0 \\
--service-cidr=10.96.0.0/12 \\
--pod-network-cidr=10.244.0.0/16

(2)二进制包

从github下载发行版的二进制包, 手动部署每个组件,组成kubernetes集群。

kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制部署kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

B站学习网址:尚硅谷Kubernetes教程(K8s新版已上传,推荐观看)_哔哩哔哩_bilibili

k8s教程由浅入深-尚硅谷_哔哩哔哩_bilibili

以上是关于第144天学习打卡( Kubernetes DaemonSet k8s集群组件 k8s的核心概念)的主要内容,如果未能解决你的问题,请参考以下文章

第156天学习打卡(Kubernetes 搭建监控平台 高可用集群部署 )

第152天学习打卡(Kubernetes 集群安全机制)

第149天学习打卡(Kubernetes 部署nginx 部署Dashboard)

第151天学习打卡(Kubernetes 集群YAML文件详解 Pod Controller)

第153天学习打卡(Kubernetes Ingress Helm)

第154天学习打卡(Kubernetes 使用Helm快速部署应用, 如何自己创建Chart)