ansible部署kbuernetes

ruyinote      2022-02-17     680

关键词:

K8S集群架构:

一个K8S集群是由两大部分组成:

Master节点和Node节点

ansible部署kbuernetes_kubernetes

一.Master节点主要包括API Server、Scheduler、Controller manager、etcd几大组件

1.API Server (提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接和etcd进行交互)

Kubernetes 集群中,API Server 扮演着通信枢纽的位置。API Server 不仅负责和 etcd 交互(其他组件不会直接操作 etcd,只有 API Server 这么做),并切对外提供统一的API调用入口, 所有的交互都是以 API Server 为核心的。API Server 提供了以下的功能:

 

1).整个集群管理的 API 接口:所有对集群进行的查询和管理都要通过 API 来进行。集群内部的组件(如kubelet)也是通过Apiserver更新和同步数据到etcd中。

2).集群内部各个模块之间通信的枢纽:所有模块之前并不会之间互相调用,而是通过和 API Server 打交道来完成自己那部分的工作。

3).集群安全控制:API Server 提供的验证和授权保证了整个集群的安全。

4).数据中心枢纽: API Server 负责和 Etcd 交互存放集群用到的运行数据。

2.Scheduler (负责对集群内部的资源进行调度,相当于“调度室”。)

 

Scheduler负责节点资源管理,接收来自kube-apiserver创建Pods的任务,收到任务后它会检索出所有符合该Pod要求的Node节点(通过预选策略和优选策略),开始执行Pod调度逻辑。调度成功后将Pod绑定到目标节点上。

 

3.Controller manager

 

controller-manager 作为 k8s 集群的管理控制中心,负责集群内 Node、Namespace、Service、Token、Replication 等资源对象的管理,使集群内的资源对象维持在预期的工作状态。

每一个 controller 通过 api-server 提供的 restful 接口实时监控集群内每个资源对象的状态,当发生故障,导致资源对象的工作状态发生变化,就进行干预,尝试将资源对象从当前状态恢复为预期的工作状态,常见的 controller 有 Namespace Controller、Node Controller、Service Controller、ServiceAccount Controller、Token Controller、ResourceQuote Controller、Replication Controller等。

 

4.Etcd

 

etcd在kubernetes集群是用来存放数据并通知变动的。

Kubernetes中没有用到数据库,它把关键数据都存放在etcd中,这使kubernetes的整体结构变得非常简单。在kubernetes中,数据是随时发生变化的,比如说用户提交了新任务、增加了新的Node、Node宕机了、容器死掉了等等,都会触发状态数据的变更。状态数据变更之后呢,Master上的kube-scheduler和kube-controller-manager,就会重新安排工作,它们的工作安排结果也是数据。这些变化,都需要及时地通知给每一个组件。etcd有一个特别好用的特性,可以调用它的api监听其中的数据,一旦数据发生变化了,就会收到通知。有了这个特性之后,kubernetes中的每个组件只需要监听etcd中数据,就可以知道自己应该做什么。kube-scheduler和kube-controller-manager呢,也只需要把最新的工作安排写入到etcd中就可以了,不用自己费心去逐个通知了。

二.Node节点主要包括kubelet、kube-proxy模块和pod对象

1.Pod

Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。

2.Kubelet

运行在每个计算节点上

1).kubelet 组件通过 api-server 提供的接口监测到 kube-scheduler 产生的 pod 绑定事件,然后从 etcd 获取 pod 清单,下载镜像并启动容器。

2).同时监视分配给该Node节点的 pods,周期性获取容器状态,再通过api-server通知各个组件。

3.kube-proxy

首先k8s 里所有资源都存在 etcd 中,各个组件通过 apiserver 的接口进行访问etcd来获取资源信息

kube-proxy 会作为 daemon(守护进程) 跑在每个节点上通过watch的方式监控着etcd中关于Pod的最新状态信息,它一旦检查到一个Pod资源被删除了或新建或ip变化了等一系列变动,它就立即将这些变动,反应在iptables 或 ipvs规则中,以便之后 再有请求发到service时,service可以通过ipvs最新的规则将请求的分发到pod上。

创建pod的调度流程

ansible部署kbuernetes_kubernetes_02

1.、用户通过REST API创建一个Pod

2.、apiserver将其写入etcd

3.、Scheduler通过apiserver查看未绑定的Pod。尝试为Pod分配主机。

4、过滤主机 (调度预选):scheduler用一组规则过滤掉不符合要求的主机。比如Pod指定了所需要的资源量,那么可用资源比Pod需要的资源量少的主机会被过滤掉.

5、主机打分(调度优选):对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把容一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等。

6、选择主机:选择打分最高的主机,进行binding操作,结果存储到etcd中。

7、kubelet根据调度结果执行Pod创建操作: 绑定成功后,scheduler会调用APIServer的API在etcd中创建一个boundpod对象,描述在一个工作节点上绑定运行的所有pod信息。运行在每个工作节点上的kubelet也会定期与etcd同步boundpod信息,一旦发现应该在该工作节点上运行的boundpod对象没有更新,则调用Docker API创建并启动pod内的容器。

ansible部署k8s集群

节点名称

IP

安装组件或角色

ansible部署机

192.168.202.164

ansible、kubeasz

k8s-m1

192.168.202.157

master组件

k8s-m2

192.168.202.158

master组件

k8s-m3

192.168.202.159

master组件

vip

192.168.202.160

 

k8s-etcd1

192.168.202.161

etcd组件

k8s-etcd2

192.168.202.162

etcd组件

k8s-etcd3

192.168.202.163

etcd组件

k8s-n1

192.168.202.165

work节点

k8s-n2

192.168.202.166

work节点

k8s-n3

192.168.202.167

work节点

系统: Ubuntu20.04

参考网站:

https://github.com/easzlab/kubeasz

ansible部署kbuernetes_k8s_03

注意1:确保各节点时区设置一致、时间同步。 如果你的环境没有提供NTP 时间同步,推荐集成安装chrony

注意2:确保在干净的系统上开始安装,不要使用曾经装过kubeadm或其他k8s发行版的环境

注意3:建议操作系统升级到新的稳定内核,请结合阅读内核升级文档

注意4:在公有云上创建多主集群,请结合阅读在公有云上部署 kubeasz

 

1、ansible部署机配置源

cp /etc/apt/sources.list /etc/apt/sources.list.bak

cat  << EOF    > /etc/apt/sources.list

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

EOF

apt update

安装ansible

apt install python3-pip

 pip3 install ansible

ansible部署kbuernetes_ansible_04

2、下载项目源码、二进制及离线镜像

下载工具脚本ezdown,举例使用kubeasz版本3.0.0

export release=3.1.0

curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown

chmod +x ./ezdown

# 使用工具脚本下载

./ezdown -D

上述脚本运行成功后,所有文件(kubeasz代码、二进制、离线镜像)均已整理好放入目录/etc/kubeasz

 3、在ansible控制端配置免密码登录

# 更安全 Ed25519 算法

ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519

# 或者传统 RSA 算法

ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa

ssh-copy-id $IPs #$IPs为所有节点地址包括自身,按照提示输入yes 和root密码

4、 创建集群配置实例

ansible部署kbuernetes_k8s_05

5、编辑hosts文件、config.yml文件

vi /etc/kubeasz/clusters/k8s-01/hosts

编辑etcd、master、node节点的IP

ansible部署kbuernetes_dashboard_06

选择网络:calico

ansible部署kbuernetes_ansible_07

vi /etc/kubeasz/clusters/k8s-01/config.yml

ansible部署kbuernetes_kubernetes_08

# 一键安装

ezctl setup k8s-01 all

 

# 或者分步安装,具体使用 ezctl help setup 查看分步安装帮助信息

# ezctl setup k8s-01 01

# ezctl setup k8s-01 02

# ezctl setup k8s-01 03

# ezctl setup k8s-01 04

# ezctl setup k8s-01 05

 

部署dashboard

1、获取recommended.yaml文件

https://github.com/kubernetes/dashboard/releases

ansible部署kbuernetes_kubernetes_09

下载yaml文件并更改nodeport:

ansible部署kbuernetes_k8s_10

2、创建dashboard

kubectl apply -f recommended.yaml

3、创建admin权限账号secret

 cat  > admin-user.yml < EOF

apiVersion: v1

kind: ServiceAccount

metadata:

  name: admin-user

  namespace: kubernetes-dashboard

 

---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

  name: admin-user

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: cluster-admin

subjects:

- kind: ServiceAccount

  name: admin-user

  namespace: kubernetes-dashboard

EOF

 

创建

kubectl apply -f admin-user.yaml

查看secret中的token

 kubectl describe secret  -n kubernetes-dashboard   $(kubectl get secret -A | grep admin | awk '{print $2}') | grep token

访问dashboard

https://192.168.202.162:30002/

ansible部署kbuernetes_dashboard_11

 

ansible部署zabbix客户端

Ansible部署zabbix客户端1、简介ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作... 查看详情

第1天:ansible安装部署

Ansible介绍Ansible是一个简单的自动化引擎,可完成配置管理、应用部署、服务编排以及各种IT需求。它是一款使用Python语言开发实现的开源软件,其依赖Jinjia2、paramiko和PyYAML这几个python库。Ansible安装部署简单,只需要再主控端部... 查看详情

ansible批量部署服务

一.ansible1.概念ansible是一个基于Python开发的自动化运维工具!其功能实现基于SSH远程连接服务!ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能2.网址:http://docs.ansible.com/官网3.特点不需要单独... 查看详情

ansible批量部署(代码片段)

自动化运维工具shell脚本/Ansible(无客户端)/Saltstack(master-minion)回顾服务器部署的流程:买云主机->环境部署->软件部署->配置部署->启动服务->测试->加入集群 1.Ansible基本概述ansible是一个配置管理系统configurationmanage... 查看详情

[自动化]部署ansible服务及其常用的命令模块(代码片段)

Ansible简介:Ansible基于Python开发,默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,可同时支持多台主机进行管理。ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是ansible... 查看详情

jenkins+ansible+gitlab自动化部署三剑客--ansible

Ansible简介Ansible是一个开源部署工具开发语言:python特点:SSH协议通讯,全平台,无需编译,模块化部署管理作用:推送Playbook进行远程节点快速部署Ansible与Chef,Saltstack的区别Chef  Ruby语言编写,C/S架构,配置需要Git依赖,Recipe... 查看详情

运维神器ansible安装部署

抽空研究下自动运维神器,ansible,基于SSH的管理,不需要agent核心:ansible核心模块(CoreModules):这些都是ansible自带的模块?扩展模块(CustomModules):如果核心模块不足以完成某种功能,可以添加扩展模块插件(Plugins):完成模... 查看详情

自动化工具-ansible服务部署与使用

1.前言1.1ansible软件介绍python语言是运维人员必须会的语言ansible是一个基于python开发的自动化运维工具其功能实现基于ssh远程连接服务ansible可以实现批量系统配置,批量软件部署,批量文件拷贝,批量运行命令等功能除了ansible之... 查看详情

自动化运维工具ansible的详细部署(代码片段)

Ansible的来历Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 Ansible是基于paramiko开发的,并且基于模块化工... 查看详情

ansible部署tocmat

说明:ansible-palybook批量部署tomcat以及tomcat所需要的jdk环境,以及分发站点文件1.安装pythonyum -y install zlib zlib-devel   openssl openssl-devel #后期安装ansible会依赖所以wgethttp://www.pyt 查看详情

ci/cd之jenkins结合ansible部署apache(代码片段)

jenkins结合ansible部署apache演示环境部署步骤安装ansible创建新git项目ansible主控端配置jenkins测试配置用户设置jenkins部署部署测试在测试环境测试在生产环境部署建议演示环境server1 192.168.122.11 gitlab端 4G内存server2 192.168.122.12 j... 查看详情

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建(代码片段)

文章目录ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建一、ansible的安装部署1.1、ansible简介1.2、实验环境1.3、安装部署ansible二、ansible的基本信息和参数使... 查看详情

ansible架构介绍及部署(代码片段)

Ansible架构模式Ansible是由控制机和被管理机组成:控制机是用来安装Ansible工具软件和执行指令的服务器,被管理机是指运行业务的服务器,由控制机通过SSH进行管理。Ansible管理方式Ansible是一个模型驱动管理器,支持多节点发布... 查看详情

ci/cd之jenkins结合ansible部署apache(代码片段)

jenkins结合ansible部署apache演示环境部署步骤安装ansible创建新git项目ansible主控端配置ansible主配置文件编写配置清单编写下载apache的playbook修改apache配置文件最终目录结构如下jenkins测试配置用户设置jenkins部署部署测试在测试环境测... 查看详情

linux批量管理神器ansible部署

Linux批量管理神器ansible部署第一个历程安装软件安装依赖关系包yuminstallpython-devpython-yamlpython-paramikopython-jinja2git确保无误,使用yum安装absibleyuminstallansible第二个历程配置文件ansbible配置文件安装后的配置文件位于/etc/ansible第三个... 查看详情

ansible的部署和命令模板

一、ansible的概述1、ansible简介Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。它使用SSH来和节点进行通信。Ansi... 查看详情

ansible系统概述与部署(代码片段)

title:Ansible系统概述与部署(1)date:2018-12-0110:27:03tags:Ansiblecategories:Ansiblecopyright:true---Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部... 查看详情

部署docker-registry+ui,使用ansible部署docker实例(代码片段)

#部署docker-registry+ui,使用ansible部署docker实例dockerregistry配置域名证书,用户密码认证,轻量UIshell部署docker-registry+uihttps://www.cnblogs.com/elvi/p/13394449.html#运行ansible-playbookdocker-registry.yml#删除ansible-playbookd 查看详情