k8s+docker集群整合搭建(完整版)

一、Kubernetes系列之介绍篇

1、背景介绍

  云计算飞速发展

  • IaaS

    • PaaS

      • SaaS

  Docker技术突飞猛进

  • 一次构建,到处运行

    • 容器的快速轻量

      • 完整的生态环境

2、什么是kubernetes

  首先,他是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提了大规模容器集群管理的便捷性。

  Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。

Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有如下关键特征:

拥有一个唯一指定的名字

拥有一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号

能够体现某种远程服务能力

被映射到了提供这种服务能力的一组容器应用上

  Service的服务进程目前都是基于Socket通信方式对外提供服务,比如Redis、Memcache、MySQL、Web Server,或者是实现了某个具体业务的一个特定的TCP Server进程,虽然一个Service通常由多个相关的服务进程来提供服务,每个服务进程都有一个独立的Endpoint(IP+Port)访问点,但Kubernetes能够让我们通过服务连接到指定的Service上。有了Kubernetes内奸的透明负载均衡和故障恢复机制,不管后端有多少服务进程,也不管某个服务进程是否会由于发生故障而重新部署到其他机器,都不会影响我们对服务的正常调用,更重要的是这个Service本身一旦创建就不会发生变化,意味着在Kubernetes集群中,我们不用为了服务的IP地址的变化问题而头疼了。

  容器提供了强大的隔离功能,所有有必要把为Service提供服务的这组进程放入容器中进行隔离。为此,Kubernetes设计了Pod对象,将每个服务进程包装到相对应的Pod中,使其成为Pod中运行的一个容器。为了建立Service与Pod间的关联管理,Kubernetes给每个Pod贴上一个标签Label,比如运行MySQL的Pod贴上name=mysql标签,给运行PHP的Pod贴上name=php标签,然后给相应的Service定义标签选择器Label Selector,这样就能巧妙的解决了Service于Pod的关联问题。

  在集群管理方面,Kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node,其中,在Master节点运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的。Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁以及实现软件模式的负载均衡器。

  在Kubernetes集群中,它解决了传统IT系统中服务扩容和升级的两大难题。你只需为需要扩容的Service关联的Pod创建一个Replication Controller简称(RC),则该Service的扩容及后续的升级等问题将迎刃而解。在一个RC定义文件中包括以下3个关键信息。

目标Pod的定义

目标Pod需要运行的副本数量(Replicas)

要监控的目标Pod标签(Label)

  在创建好RC后,Kubernetes会通过RC中定义的的Label筛选出对应Pod实例并实时监控其状态和数量,如果实例数量少于定义的副本数量,则会根据RC中定义的Pod模板来创建一个新的Pod,然后将新Pod调度到合适的Node上启动运行,知道Pod实例的数量达到预定目标,这个过程完全是自动化。

  

 Kubernetes优势:

  • 容器编排

  • 轻量级

  • 开源

  • 弹性伸缩

  • 负载均衡

3 、Kubernetes的核心概念

3.1、Master

  k8s集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd存储服务(可选),运行Api Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。

  • Kubernetes API server提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。也是集群控制的入口进程;

  • Kubernetes Controller Manager是Kubernetes所有资源对象的自动化控制中心;

  • Kubernetes Schedule是负责资源调度(Pod调度)的进程

3.2、Node

  Node是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。关联Master管理节点,拥有名称和IP、系统资源信息。

  • 运行docker eninge服务

  • 守护进程kunelet

  • 负载均衡器kube-proxy

每个Node节点都运行着以下一组关键进程

kubelet:负责对Pod对于的容器的创建、启停等任务

kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件

Docker Engine(Docker):Docker引擎,负责本机容器的创建和管理工作

  Node节点可以在运行期间动态增加到Kubernetes集群中,默认情况下,kubelet会向master注册自己,这也是Kubernetes推荐的Node管理方式,kubelet进程会定时向Master汇报自身情报,如操作系统、Docker版本、CPU和内存,以及有哪些Pod在运行等等,这样Master可以获知每个Node节点的资源使用情况,并实现高效均衡的资源调度策略。

3.3、Pod

运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。

Pod其实有两种类型,普通Pod和静态Pod,后者比较特殊,它并不存在Kubernetes的etcd存储中,而是存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动。普通Pod一旦被创建,就会被放入etcd存储中,随后会被Kuberrnetes Master调度到某个具体的Node上进行绑定,随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并启动起来,在默认情况下,当Pod里的某个容器停止时,Kubernetes会自动检测到这个问题并且重启这个Pod(重启Pod里所有容器),如果Pod所在的Node宕机,则会将这个Node上的所有Pod重新调度到其他节点上。

3.4、Replication Controller

Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。

3.5、Service

Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同Label的Pod,用户不需要了解后台Pod是如何运行。

外部系统访问Service的问题

首先需要弄明白Kubernetes的三种IP这个问题

  • Node IP:Node节点的IP地址

  • Pod IP: Pod的IP地址

  • Cluster IP:Service的IP地址  

    

首先,Node IP是Kubernetes集群中节点的物理网卡IP地址,所有属于这个网络的服务器之间都能通过这个网络直接通信。这也表明Kubernetes集群之外的节点访问Kubernetes集群之内的某个节点或者TCP/IP服务的时候,必须通过Node IP进行通信。

其次,Pod IP是每个Pod的IP地址,它是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络。

最后Cluster IP是一个虚拟的IP,但更像是一个伪造的IP网络,原因有以下几点

Cluster IP仅仅作用于Kubernetes Service这个对象,并由Kubernetes管理和分配IP地址

Cluster IP无法被ping,它没有一个“实体网络对象”来响应

Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备通信的基础,并且它们属于Kubernetes集群这样一个封闭的空间。

Kubernetes集群之内,Node IP网、Pod IP网与Cluster IP网之间的通信,采用的是Kubernetes自己设计的一种编程方式的特殊路由规则。

3.6、Label

Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的Key/Value键值对,其中key与Value由用户自己指定。Label可以附加在各种资源对象上,如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label可以被添加到任意数量的资源对象上去。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。

我们可以通过给指定的资源对象捆绑一个或者多个不同的Label来实现多维度的资源分组管理功能,以便灵活、方便的进行资源分配、调度、配置等管理工作。

版本标签:"release":"stable","release":"canary"......

环境标签:"environment":"dev","environment":"qa","environment":"production"

架构标签:"tier":"frontend","tier":"backend","tier":"middleware"

分区标签:"partition":"customerA","partition":"customerB"

质量管控标签:"track":"daily","track":"weekly"

Label相当于我们熟悉的标签,给某个资源对象定义一个Label就相当于给他打了一个标签,随后可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,Kubernetes通过这种方式实现了类似SQL的简单又通用的对象查询机制。

Label Selector在Kubernetes中重要使用场景如下:

kube-Controller进程通过资源对象RC上定义Label Selector来筛选要监控的Pod副本的数量,从而实现副本数量始终符合预期设定的全自动控制流程

 kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立起每个Service到对应Pod的请求转发路由表,从而实现Service的智能负载均衡

 通过对某些Node定义特定的Label,并且在Pod定义文件中使用Nodeselector这种标签调度策略,kuber-scheduler进程可以实现Pod”定向调度“的特性

4、Kubernetes架构和组件

- 服务分组,小集群,多集群

- 服务分组,大集群,单集群

4.1、Kubernetes组件:

Kubernetes Master控制组件,调度管理整个系统(集群),包含如下组件:

4.1.1、Kubernetes API Server

作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。

4.1.2.Kubernetes Scheduler

    为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。

4.1.3.Kubernetes Controller

    负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。

4.1.4. Replication Controller

    管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。

4.1.5. Node Controller

    管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。

4.1.6. Namespace Controller

    管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。

4.1.7. Service Controller

    管理维护Service,提供负载以及服务代理。

4.1.8.EndPoints Controller

    管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。

4.1.9. Service Account Controller

    管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。

4.1.10. Persistent Volume Controller

    管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。

4.1.11. Daemon Set Controller

    管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。

4.1.12. Deployment Controller

    管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。

4.1.13.Job Controller

    管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目

4.1.14. Pod Autoscaler Controller

    实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

4.2、Kubernetes Nodes

Kubernetes Nodes运行节点,运行管理业务容器,包含如下组件

4.2.1、Kubelet

负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server.

4.2.2、Kubernetes Proxy

负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。

4.3.3、Docker

Node上需要运行容器服务

二、基于Kubernetes构建Docker集群环境实战

kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成

1、etcd:

高可用存储共享配置和服务发现,作为与node机器上的flannel配套使用,作用是使每台 node上运行的docker拥有不同的ip段,最终目的是使不同的node上正在运行的docker containner都有一个与别的任意一个containner(别的node上运行的docker containner)不一样的IP地址。

2、flannel:

网络结构支持

3、kube-apiserver:

不论通过kubectl还是使用remote api 直接控制,都要经过apiServer

4、kube-controller-manager:

对replication controller,endpoints controller,namespace controller,and serviceaccounts controller的循环控制,与kube-apiserver交互,保证这些controller工作

5、kube-scheduler

Kubernetes scheduler 的作用就是根据特定的调度算法将pod调度到指定的工作节点(node)上,这一过程也叫绑定(bind)。

6、kubelet

Kubelet运行在Kubernetes Node上. 它是container agent的逻辑继任者

7、kube-proxy

kube-proxy是kubernetes 里运行在node节点上的一个组件,它起的作用是一个服务代理的角色

三、准备环境

1、架构拓扑图

在这里插入图片描述

2、环境规划CentOS7系统机器两台:

192.168.10.130:用来安装Kubernetes master

192.168.10.131:用作kubernetes node(node1)

角色                      IP                      组件
master                  192.168.10.130          etcd、kube-apiserver、kube-controller-manager、kube-scheduler
node01                  192.168.10.131          kubelet、kube-proxy、docker
node02                  192.168.10.132          kubelet、kube-proxy、docker

3、环境说明

操作系统: CentOS7

Kubernetes版本:v1.8.3

Docker版本:v17.09-ce

均采用当前最新稳定版本。

关闭selinux。

备注:本人用的版本为以下:

查看系统内核:uname -r 显示结果3.10.0-229.el7.x86_64

查看系统版本:cat /etc/centos-release

显示结果 CentOS Linux release 7.1.1503 (Core)

查看系统位数:getconf LONG_BIT

操作系统: CentOS Linux release 7.1.1503 (Core)

Kubernetes版本:v1.10.

Docker版本:v17.05-ce

Etcd版本:v3.34

关闭selinux。

部署部分

四、部署集群

1、下载二进制包

Kubernetes软件包及ETCD

可以到官方的下载地址下载,地址是:点击打开链接,最新下载版本是V1.10,会被墙,可以参考点击打开链接,无论如何我还是把V1.0的client binary、server binary、node binary下载下来了。ETCD可以到点击打开链接下载。

软件包 用途

kubernetes-server-linux-amd64.tar.gz

版本是V1.10,包含KUBE-APISERVER,KUBE-CONTROLLER-MANAGER,KUBE-SCHEDULE

下载地址: kubernetes-server-linux-amd64.tar.gz_免费高速下载|百度网盘-分享无限制

kubernetes-node-linux-amd64.tar.gz

版本是V1.10,包含KUBELET,KUBE-PROXY,KUBECTL,需要先安装Docker

下载地址:kubernetes-node-linux-amd64.tar.gz_免费高速下载|百度网盘-分享无限制

etcd-v3.3.4-linux-amd64.tar.gz

版本是V3.34,Kubernetes Master需要ETCD数据存储

下载地址:etcd-v3.3.4-linux-amd64.tar.gz_免费高速下载|百度网盘-分享无限制

Docker

版本V1.17.05

2、下载完成后,上传到服务器

kubernetes-server-linux-amd64.tar.gz上传到master节点。

kubernetes-node-linux-amd64.tar.gz 上传到node节点。

etcd-v3.3.4-linux-amd64.tar.gz上传到node节点

五、关闭系统运行的防火墙及selinux和设置时区主机名

1、如果系统开启了防火墙则按如下步骤关闭防火墙(所有机器)

# systemctl stop firewalld # systemctl disable firewalld

2、关闭selinux

vim /etc/sysconfig/selinux
​
将以下值找到并修改
SELINUX=disabled
​
修改完后运行以下命令使得修改生效
setenforce 0

3.分别设置主机名为master1 node1 ... 时区

设置时区,master、node机器都需执行,时间统一

timedatectl set-timezone Asia/Shanghai

设置master主机名

hostnamectl set-hostname master

设置node主机名

hostnamectl set-hostname node #node执行

六、master(即kubernetes-server)主机机器安装配置

1、安装etcd

ETCD是用于共享配置和服务发现的分布式、一致性的KV存储系统,主要包括了增删改查、安全认证、集群、选举、事务、分布式锁、Watch机制等等,实现了RAFT协议,功能相当强大

1.1、解压文件

etcd-v3.3.4-linux-amd64.tar.gz

1.2 复制文件到指定目录或就在当前目录,但需bin目录下

把解压目录下的etcd和etcdctl复制到/usr/local/bin目下 ,或自己建一个bin目录,然后把etcd和etcdctl放在建的bin目录下

cd /usr/local/bin/

1.3配置etcd的配置文件

确保列出的这些项都配置正确并且没有被注释掉,下面的配置都是如此 

[telecom@master ~]$ vim /etc/etcd/etcd.conf
​
ETCD_NAME="default"
​
ETCD_DATA_DIR="/var/lib/kubelet"
​
ETCD_LISTEN_PEER_URLS="http://192.168.10.130:2380"
​
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://127.0.0.1:2379,http://192.168.10.130:2379,http://192.168.10.130:4001"
​
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.130:2380"
​
# if you use different ETCD_NAME (e.g. test),set ETCD_INITIAL_CLUSTER value for this name,i.e. "test=http://..."
​
ETCD_INITIAL_CLUSTER="default=http://192.168.10.130:2380"
​
ETCD_INITIAL_CLUSTER_STATE="new"
​
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
​
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
​
ETCD_HEARTBEAT_INTERVAL=6000
​
ETCD_ELECTION_TIMEOUT=30000
​
​

1.4、配置systemctl

在/etc/systemd/system/目录下创建etcd.service,如果没有system这个目录,则创建就可以,首先创建ETCD的存储的目录地址/home/chen/etcd/data,然后创建ETCD的配置文件目录/etc/etcd/,因为我们用的ETCD默认配置,所以/etc/etcd/etcd.conf空文件即可。

[telecom@master ~]$ vim /etc/systemd/system/etcd.service
​
[Unit]
​
Description=etcd server
​
After=network.target
​
After=network-online.target
​
Wants=network-online.target
​
 
​
[Service]
​
#Type=simple
​
Type=notify
​
WorkingDirectory=/var/lib/kubelet
​
EnvironmentFile=-/etc/etcd/etcd.conf
​
ExecStart=/usr/local/bin/etcd
​
[Install]
​
WantedBy=multi-user.target

1.5、配置好后。执行一下命令

systemctl daemon-reload
​
systemctl enable etcd.service
​
systemctl start etcd.service
​
systemctl status etcd.service
​
systemctl stop etcd.service

遇到的问题

spawning /usr/local/bin/etcd: Not a directory
​
新建
mkdir -p /var/lib/kubelet
​
将 /etc/systemd/system/etcd.service
中的WorkingDirectory修改路径
[Service]
WorkingDirectory=/var/lib/kubelet
​
并在/etc/etcd/etcd.conf
中的
ETCD_DATA_DIR="/var/lib/kubelet"
​
然后再按需执行以上命令则会成功

1.6、查看etcd状态

img

1.7、验证是否往etcd中写数据是否成功,执行

export ETCDCTL_API=3
  
etcdctl set 键 “值”
    
etcdctl get 键 
​
例:[telecom@master ~]$ etcdctl set li "123"
 
123
​
[telecom@master ~]$ etcdctl get li
​

1.8、设置环境变量

vi /etc/profile中
​
加入 export ETCDCTL_API=3
​
执行source /etc/profile

img

如果报错,使用 journalctl -f -t etcd 和 journalctl -u etcd 来定位问题。

img

原文地址:https://blog.csdn.net/Isonion/article/details/132431860

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读942次。kube-controller-manager 和 kubelet 是异步工作的,这意味着延迟可能包括任何的网络延迟、apiserver 的延迟、etcd 延迟,一个节点上的负载引起的延迟等等。当 Kubernetes 中 Node 节点出现状态异常的情况下,节点上的 Pod 会被重新调度到其他节点上去,但是有的时候我们会发现节点 Down 掉以后,Pod 并不会立即触发重新调度,这实际上就是和 Kubelet 的状态更新机制密切相关的,Kubernetes 提供了一些参数配置来触发重新调度的时间。_node-monitor-period
文章浏览阅读3.8k次。上篇文章详细介绍了弹性云混部的落地历程,弹性云是滴滴内部提供给网约车等核心服务的容器平台,其基于 k8s 实现了对海量 node 的管理和 pod 的调度。本文重点介绍弹性云的调度能力,分为以下部分:调度链路图:介绍当前弹性云调度体系链路,对架构体系有一个初步的认知k8s 调度能力的运用:整体介绍弹性云现在用到的 k8s 调度能力和对其的增强k8s 版本的升级:介绍到从 k8s 1.12 到 1...._滴滴机房 腾讯
文章浏览阅读897次。对于cpu来说,这种分配方式并不会有太大问题,因为cpu可以灵活调度,numa调度时我们只计算绑定了numa cpu的pod是可以接受的,但是对于内存来说,numa node上申请了的内存无法做到随时迁移,这就会导致调度器视角numa node的mem资源足够,但是等到pod真正使用时,由于没有绑定numa node的pod申请的内存,导致numa node的mem资源不足,造成swap中断或者远端内存申请,这会对绑定mem的pod来带来性能损耗。忽略了没有绑定numa node的pod资源。_kubectl numa
文章浏览阅读796次,点赞17次,收藏15次。只要在Service定义中设置了ClusterIp:None,就定义了一个HeadLess Service, 它与普通的Service关键区别在于它没有ClusterIp地址,如果解析HeadLess Service的DNS域名,则会返回该Service对应的全部Pod的EndPoint列表,这就意味着客户端是直接与后端的pod建立了TCP/IP链接进行通信的。一个Label是一个键值对。注解:属于资源对象的元数据,可以被理解为一种特殊的标签,不过更多的是与程序挂钩,通常用于实现资源对象属性的自定义扩展。
文章浏览阅读763次。但是此时如果配置成 NONE, 租户创建成功了,但是无法创建资源文件,也就是无法上传文件,可能 dolphinscheduler 团队就想着将文件上传到 hdfs,暂不支持本地。需要将 resource.storage.type 置为 NONE, 因为我之前用的 1.3.6 版本的时候,即使资源文件存在本地文件也需要配置成 hdfs。_[error] 2023-10-24 18:10:43.762 +0800 org.apache.dolphinscheduler.api.servic
文章浏览阅读2.7k次,点赞2次,收藏13次。公司使用的是交老的k8s版本(1.16),由于老版本的K8s对于现在很多新特性不支持,所以需要升级到新版本。目前2023年7月11日最新版本的k8s是v1.27.3。通过参考官方文档进行k8s部署工作。其中涉及到操作系统配置、防火墙配置、私有镜像仓库等。_k8s最新版本
文章浏览阅读1.8w次,点赞14次,收藏27次。能节省你在kubeadm init 时遇到问题的排错时间⌚️。整合了网上大佬
文章浏览阅读1.1k次,点赞2次,收藏7次。具体操作步骤可以参考之前的教程,建议是先安装一台,然后克隆虚拟机,这样速度快。注意:在克隆时记得修改Mac地址、IP地址、UUID和主机名。(最后别忘了保存下快照~)_部署k8s集群
文章浏览阅读863次,点赞23次,收藏16次。当部署完 Kubernetes,便拥有了一个完整的集群。一组工作机器,称为节点, 会运行容器化应用程序。每个集群至少有一个工作节点。工作节点会 托管Pod ,而 Pod 就是作为应用负载的组件。控制平面管理集群中的工作节点和Pod。说人话版本:集群:cluster,多个几点被组织到一起共同为系统提供服务过程称之为集群。本质上是将承载同一个软件服务节点组织到一起,称之为该软件(服务)的集群,当然集群中的节点身份地位是不一样的。k8s集群也是如此,他也是多个节点组成。
文章浏览阅读943次。Rancher是一个开源的企业级多集群Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理,以确保集群的安全性,加速企业数字化转型。Rancher 1.0版本在2016年就已发布,时至今日,Rancher已经成长为企业在生产环境中运行容器和Kubernetes的首要选择。_rancher管理k8s
文章浏览阅读742次,点赞2次,收藏3次。本篇来讲解如何在centos下安装部署高可用k8s集群。_kubeadm ha keepalived + nginx
文章浏览阅读1.9k次,点赞21次,收藏25次。那么这个空间设置成内存的2倍大小。点击IPv4设置--手动--添加--设置ip--设置DNS服务器,最后点击--“保存”;首先选中--“本地标准磁盘”,存储配置--自定义分区,点击--“完成”;在--主机名--设置主机名:(例如k8s-master01),点击--点击+,设置--挂载点/boot--期望容量,点击--添加挂载点;点击--+--挂载点swap--期望容量,点击--“添加挂载点”;默认选择--亚洲--上海,并调整日期和时间,点击--“完成”;设备类型--确认--LVM,卷组--选择“修改”;_euler 服务器搭建
文章浏览阅读1k次。在1.25版本的k8s集群中部署gpu-manage时,虽然显示gpu节点上gpu-manage的pod实例都是running状态,但是给pod申领。既可以用源码的Makefile自动编译打包成新的镜像,但是源码的。说明gpu-manager和容器运行时接口通信失败了。编译后的镜像在1.25版本的k8s中可以正常使用。,但是在k8s1.23版本之后,接口路径已经改为。资源时,却始终找不到有资源的节点。,另外有一些依赖需要国际上的支持。可以看到这里用的运行时接口是。查看节点的详情时,返回的。_launch gpu manager 报错 can't create container runtime manager: context dead
文章浏览阅读1k次,点赞18次,收藏16次。SelfLink:API的资源对象之一,表示资源对象在集群当中自身的一个连结,self-Link是一个唯一的标识号,可以用于标识k8s集群当中的每个资源的对象。容器里使用的配置,在provisioner当中定义好环境变量,传给容器,storageclass的名称,NFS服务器的地址,NFS的目录。NFS的provisionner的客户端以pod的方式运行在集群当中,监听k8s集群当中PV的请求,然后动态的创建于NFS相关的PV。命名为 nfs-client-provisioner-clusterrole。
文章浏览阅读6.3k次,点赞2次,收藏20次。k8s证书过期解决方案之替换证书_k8s证书过期如何更换
文章浏览阅读1k次。KMS,Key Management Service,即密钥管理服务,在K8S集群中,以驱动和插件的形式启用对Secret,Configmap进行加密。以保护敏感数据
文章浏览阅读888次。exporter对于云服务的监控还是很不完美,毕竟每家都有自己的护城河。自动发现多实例这样的借助consul 阿波罗这样的会简单一些。aws可以借助cloudwatch这样的导入模板到grafana中。还是希望能将类似腾讯云云监控中的这些指标采集到prometheus中,但是这过程应该还很遥远grafana出图 prometheus查询语法这些东西有时间的好好研究一下。报警有必要进行分级别,收敛配置一下!_command: - "-redis.password-file=/redis_passwd.json
文章浏览阅读1k次。可以在此处(https://cloud.google.com/kubernetes-engine/docs/how-to/kube-dns)和此处(https://www.digitalocean.com/community/tutorials/an-introduction-to-the-kubernetes-dns-service)找到更多的详细信息。-or-ipvs/)和此处(https://arthurchiao.art/blog/cracking-k8s-node-proxy/)。_k8s默认命名空间
文章浏览阅读4.9k次,点赞11次,收藏32次。如果运行runc命令时提示:runc: error while loading shared libraries: libseccomp.so.2: cannot open shared object file: No such file or directory,则表明runc没有找到libseccomp,需要检查libseccomp是否安装,本次安装默认就可以查询到。所有主机均需要操作。所有主机均需要操作。所有主机均需要操作。所有主机均需要操作。所有主机均需要操作。所有主机均需要操作。_kubernetes 1.28
文章浏览阅读3.6w次,点赞118次,收藏144次。Canal 提供了网络功能,使得 Kubernetes 集群中的 Pod 可以相互通信,并与集群外部的服务进行通信。它通过网络插件的方式,为每个 Pod 分配唯一的 IP 地址,并管理网络流量的路由和转发。此外,Canal 还支持网络策略,用于定义 Pod 之间的通信规则和安全策略。Canal 基于 Calico 和 Flannel 项目,结合了二者的优点。它使用 Calico 的数据平面,提供高性能的网络转发和安全特性,同时使用 Flannel 的控制平面,实现 IP 地址管理和网络策略的配置。_k8s canal