容器技术---(二)kubernetes集群部署

本文详述了Kubernetes集群的搭建过程,包括环境配置、组件解析、核心组件如etcd、apiserver、controller manager、scheduler、kubelet、container runtime等的介绍。此外,还探讨了Pod管理、控制器、Service、网络通信和网络策略等关键概念,提供了丰富的实战案例,深入浅出地展示了Kubernetes的部署和管理操作。
摘要由CSDN通过智能技术生成

 Kubernetes简介

在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用;Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训;Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户

Kubernetes的好处:隐藏资源管理和错误处理,用户仅需要关注应用的开发;服务高可用、高可靠;可将负载运行在由成千上万的机器联合而成的集群中

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etcd),一切都基于分布式的存储系统

Kubernetes主要由以下几个核心组件构成:

etcd:保存了整个集群的状态

apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制

controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等

scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的集群节点上

kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理

Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)

kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

除了以上核心组件,还有一些推荐的Add-ons:

kube-dns:负责为整个集群提供DNS服务

Ingress Controller:为服务提供外网入口

Heapster:提供资源监控

Dashboard:提供GUI

Federation:提供跨可用区的集群

Fluentd-elasticsearch:提供集群日志采集、存储与查询

Kubernetes设计理念和功能其实就是一个类似Linux的分层架构

核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

接口层:kubectl命令行工具、客户端SDK以及集群联邦

生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为以下两个范畴

Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等 Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

Kubernetes集群搭建

环境:

server131主机配置docker的私有仓库        IP=172.25.100.131

server132主机作为集群的master端        IP=172.25.100.132

server133主机作为集群节点        IP=172.25.100.133

server134主机作为集群节点        IP=172.25.100.134

部署:

关闭所有主机的selinux和iptables防火墙

所有集群主机部署docker引擎:yum install -y docker-ce

所有集群主机禁用swap分区:swapoff -a && 注释掉/etc/fstab文件中的swap定义

配置集群所有节点的私有仓库指向并重启docker使之生效

复制证书文件至节点的docker配置目录下,重启节点的docker服务

集群所有节点登陆私有镜像仓库,以便后续实验需要

所有节点安装部署软件kubeadm、kubectl、kubelet

##kubelet运行在集群所有节点上,负责启动POD和容器;kubeadm是一个能快速部署kubernetes集群的工具,用于初始化集群;kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件

##查看默认kubernetes集群配置信息

##列出配置kubernetes集群所需镜像,默认从k8s.gcr.io上下载组件镜像,此镜像源在外网,需要翻墙,但可以通过修改镜像源为国内aliyun的镜像源

##从国内aliyun镜像源拉取集群所需镜像

##在集群master端初始化集群

##指定kube配置文件启动集群,此条命令出现在初始化集群时的输出中;也可在文件中配置此环境变量,以免重启主机时每次手动声明

##对于普通用户可通过以上方式进行配置文件的声明

##配置kubectl命令补齐功能

##集群节点扩容,此时所有节点均未就绪;此条命令也出现在初始化集群的输出中

##下载flannel网络组件的资源文件,更改其中的镜像指向;此文件也在外网:https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

##在镜像仓库主机拉取flannel组件需要的镜像并上传至仓库(需在浏览器页面中新建项目)

##在集群master端应用flannel网络组件的资源文件,此时集群中的所有节点均为就绪状态,集群的核心dns服务也正常启动

至此我们的一主两节点的kubernetes集群就搭建完成了

Pod管理

kubectl命令指南:

Kubectl Reference Docshttps://kubernetes.io/docs/reference/generated/kubectl/kubectl-commandsPod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip

一个pod类似一个豌豆荚(如上图),包含一个或多个容器(通常是docker容器),多个容器间共享IPC、Network和UTC namespace

##创建pod,查看其被分配至哪个集群节点,也可使用kubectl describe pod nginx查看此pod的详细信息

##由上图知道此pod指派给了server134主机,即在此主机上拉取了nginx镜像(确保自己搭建的仓库中有镜像)

##集群内部任意节点可以访问Pod,但集群外部无法直接访问(server131主机为仓库主机,不属于集群)

##删除pod,查看所有namespace

##同一namespace下的不同pod可以直接访问,--restart=Never表示pod退出后不让其此自动重启,默认的pod重启策略为always

初识控制器:

##创建副本数始终为2的控制器controller1,会生成两个pod;controller1-6f8ddbdb7c-nc9nw分别可以理解为:控制器名称,控制器的标识,pod副本的标识

##删除控制器下的pod副本,控制器会自动启动一个新的pod顶上来,并且会重新获取新的IP,因为之前设置其的副本数始终为2

##删除控制器,其下pod被彻底删除

##pod的扩容与缩容

##更新pod镜像

##查看pod镜像的历史版本(基于--record参数才可看到历史版本),回滚镜像版本

初识service:

service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务

##创建service,此时pod客户端可以通过service的名称访问后端的三个Pod;ClusterIP: 默认的service类型,会自动分配到一个仅集群内部可以访问的虚拟IP

##通过此虚拟IP访问时可以实现负载均衡效果

##将服务类型更改为NodePort形式,此时集群外部即可访问pod;也可通过参数--type=NodePort在创建service时指定类型

##NodePort类型是在在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过NodeIP:NodePort来访问该服务

资源清单

在kubernetes中,一般使用yaml格式的文件来创建符合我们预期的pod,这样的yaml文件一般称为资源清单;什么叫资源?kubernetes中所有的内容都抽象为资源,资源实例化之后叫做对象

在kubernetes中有哪些资源?

工作负载型资源(workload):Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob(ReplicationController在v1.11版本被废弃)

服务发现及负载均衡型资源(ServiceDiscovery LoadBalance):Service、Ingress、...

配置与存储型资源:Volume(存储卷)、CSI(容器存储接口,可以扩展各种各样的第三方存储卷)

特殊类型的存储卷:ConfigMap(当配置中心来使用的资源类型)、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)

以上这些资源都是配置在命名空间级别

集群级资源:Namespace、Node、Role、ClusterRole、RoleBinding(角色绑定)、ClusterRoleBinding(集群角色绑定)

元数据型资源:HPA(Pod水平扩展)、PodTemplate(Pod模板,用于让控制器创建Pod时使用的模板)、LimitRange(用来定义硬件资源限制的)

资源清单的格式:

apiserver:group/version

##指明api资源属于哪个群组和版本,同一个组可以有多个版本,如果没有给定group名称,那么默认为core;可以使用kubectl api-versions 获取当前k8s版本上所有的apiVersion版本信息(每个版本可能不同)

kind:标记创建的资源类型,k8s主要支持以下资源类别:Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、Cronjob

metadata:元数据

name:实例化的对象名称

namespace:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值