Kubernetes 编排系统_could not init in cluster config open var run se
Kubernetes (通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用的。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
正文
分类:
容器/虚拟化
1.1 Kubernetes简介
1.1.1 什么是Kubernetes
Kubernetes (通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用的。
它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括Docker等。CNCF于2017年宣布首批Kubernetes认证服务提供商(KCSPs),包含IBM、MIRANTIS、华为、inwinSTACK迎栈科技等服务商。
1.1.2 Kubernetes发展史
Kubernetes (希腊语"舵手" 或 “飞行员”) 由Joe Beda,Brendan Burns和Craig McLuckie创立,并由其他谷歌工程师,包括Brian Grant和Tim Hockin进行加盟创作,并由谷歌在2014年首次对外宣布 。它的开发和设计都深受谷歌的Borg系统的影响,它的许多顶级贡献者之前也是Borg系统的开发者。在谷歌内部,Kubernetes的原始代号曾经是Seven,即星际迷航中友好的Borg(博格人)角色。Kubernetes标识中舵轮有七个轮辐就是对该项目代号的致意。
Kubernetes v1.0于2015年7月21日发布。随着v1.0版本发布,谷歌与Linux 基金会合作组建了Cloud Native Computing Foundation (CNCF)并把Kubernetes作为种子技术来提供。
Rancher Labs在其Rancher容器管理平台中包含了Kubernetes的发布版。Kubernetes也在很多其他公司的产品中被使用,比如Red Hat在OpenShift产品中,CoreOS的Tectonic产品中, 以及IBM的IBM云私有产品中。
1.1.3 Kubernetes 特点
1、可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
2、可扩展: 模块化, 插件化, 可挂载, 可组合
3、自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
4、快速部署应用,快速扩展应用
5、无缝对接新的应用功能
6、节省资源,优化硬件资源的使用
1.1.4 Kubernetes规划组件
参考文档:http://docs.kubernetes.org.cn/249.html
Kubernetes定义了一组构建块,它们可以共同提供部署、维护和扩展应用程序的机制。组成Kubernetes的组件设计为松耦合和可扩展的,这样可以满足多种不同的工作负载。可扩展性在很大程度上由Kubernetes API提供——它被作为扩展的内部组件以及Kubernetes上运行的容器等使用。
Pod
Kubernetes的基本调度单元称为“pod”。它可以把更高级别的抽象内容增加到容器化组件。一个pod一般包含一个或多个容器,这样可以保证它们一直位于主机上,并且可以共享资源。Kubernetes中的每个pod都被分配一个唯一的(在集群内的)IP地址这样就可以允许应用程序使用端口,而不会有冲突的风险。
Pod可以定义一个卷,例如本地磁盘目录或网络磁盘,并将其暴露在pod中的一个容器之中。pod可以通过Kubernetes API手动管理,也可以委托给控制器来管理。
标签和选择器
Kubernetes使客户端(用户或内部组件)将称为“标签”的键值对附加到系统中的任何API对象,如pod和节点。相应地,“标签选择器”是针对匹配对象的标签的查询。
标签和选择器是Kubernetes中的主要分组机制,用于确定操作适用的组件。
例如,如果应用程序的Pods具有系统的标签 tier (“front-end”, “back-end”, for example) 和一个release_track (“canary”, “production”, for example),那么对所有"back-end" 和 “canary” 节点的操作可以使用如下所示的标签选择器:
tier=back-end AND release_track=canary
控制器
控制器是将实际集群状态转移到所需集群状态的对帐循环。它通过管理一组pod来实现。一种控制器是一个“复制控制器”,它通过在集群中运行指定数量的pod副本来处理复制和缩放。如果基础节点出现故障,它还可以处理创建替换pod。
其它控制器,是核心Kubernetes系统的一部分包括一个“DaemonSet控制器”为每一台机器(或机器的一些子集)上运行的恰好一个pod,和一个“作业控制器”用于运行pod运行到完成,例如作为批处理作业的一部分。控制器管理的一组pod由作为控制器定义的一部分的标签选择器确定。
服务
Kubernetes服务是一组协同工作的pod,就像多层架构应用中的一层。构成服务的pod组通过标签选择器来定义。
Kubernetes通过给服务分配静态IP地址和域名来提供服务发现机制,并且以轮询调度的方式将流量负载均衡到能与选择器匹配的pod的IP地址的网络连接上(即使是故障导致pod从一台机器移动到另一台机器)。默认情况下,一个服务会暴露在集群中(例如,多个后端pod可能被分组成一个服务,前端pod的请求在它们之间负载平衡);但是,一个服务也可以暴露在集群外部(例如,从客户端访问前端pod)。
1.1.5 Kubernetes核心组件
Kubernetes遵循master-slave architecture。Kubernetes的组件可以分为管理单个的 node 组件和控制平面的一部分的组件。
Kubernetes Master是集群的主要控制单元,用于管理其工作负载并指导整个系统的通信。Kubernetes控制平面由各自的进程组成,每个组件都可以在单个主节点上运行,也可以在支持high-availability clusters的多个主节点上运行。
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 | 提供集群日志采集、存储与查询 |
1.1.6 分层架构
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、集群自身的配置和管理等 |
1.2 部署Kubernetes集群
1.2.1 主机环境说明
系统版本说明
[root@k8s-master ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@k8s-master ~]# uname -r
3.10.0-327.el7.x86_64
[root@k8s-master ~]# getenforce
Disabled
[root@k8s-master ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
主机IP规划
主机名 | IP | 功能 |
k8s-master | 10.0.0.11/172.16.1.11 | Master、etcd、registry |
k8s-node-1 | 10.0.0.12/172.16.1.12 | node1 |
k8s-node-2 | 10.0.0.13/172.16.1.13 | node2 |
设置hosts解析
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.11 k8s-master
10.0.0.12 k8s-node-1
10.0.0.13 k8s-node-2
1.2.2 安装软件包
在三个节点上分别操作
[root@k8s-master ~]# yum install etcd docker kubernetes flannel -y
[root@k8s-node-1 ~]# yum install docker kubernetes flannel -y
[root@k8s-node-2 ~]# yum install docker kubernetes flannel -y
安装的软件版本说明
[root@k8s-master ~]# rpm -qa etcd docker kubernetes flannel
flannel-0.7.1-2.el7.x86_64
docker-1.12.6-71.git3e8e77d.el7.centos.1.x86_64
kubernetes-1.5.2-0.7.git269f928.el7.x86_64
etcd-3.2.11-1.el7.x86_64
1.2.3 修改配置etcd
yum安装的etcd默认配置文件在/etc/etcd/etcd.conf。
最终配置文件
[root@k8s-master ~]# grep -Ev ‘^$|#’ /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/default.etcd”
ETCD_LISTEN_CLIENT_URLS=“http://0.0.0.0:2379”
ETCD_NAME=“default”
ETCD_ADVERTISE_CLIENT_URLS=“http://10.0.0.11:2379”
启动etcd
[root@k8s-master ~]# systemctl enable etcd
[root@k8s-master ~]# systemctl start etcd
测试etcd
etcdctl set testdir/testkey0 0
etcdctl set testdir/testkey0 0
[root@k8s-master ~]# etcdctl -C http://10.0.0.11:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://10.0.0.11:2379
cluster is healthy
1.2.4 配置并启动kubernetes
/etc/kubernetes/apiserver配置文件内容
[root@k8s-master ~]# grep -Ev ‘^$|#’ /etc/kubernetes/apiserver
KUBE_API_ADDRESS=“–insecure-bind-address=0.0.0.0”
KUBE_API_PORT=“–port=8080”
KUBE_ETCD_SERVERS=“–etcd-servers=http://10.0.0.11:2379”
KUBE_SERVICE_ADDRESSES=“–service-cluster-ip-range=10.254.0.0/16”
KUBE_ADMISSION_CONTROL=“–admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota”
KUBE_API_ARGS=“”
/etc/kubernetes/config配置文件
[root@k8s-master ~]# grep -Ev ‘^$|#’ /etc/kubernetes/config
KUBE_LOGTOSTDERR=“–logtostderr=true”
KUBE_LOG_LEVEL=“–v=0”
KUBE_ALLOW_PRIV=“–allow-privileged=false”
KUBE_MASTER=“–master=http://10.0.0.11:8080”
启动服务
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service
systemctl enable kube-controller-manager.service
systemctl start kube-controller-manager.service
systemctl enable kube-scheduler.service
systemctl start kube-scheduler.service
1.2.5 部署配置node
/etc/kubernetes/config配置文件
[root@k8s-node-1 ~]# grep -Ev ‘^KaTeX parse error: Expected 'EOF', got '#' at position 2: |#̲' /etc/kubernet…|#’ /etc/kubernetes/kubelet
KUBELET_ADDRESS=“–address=0.0.0.0”
KUBELET_HOSTNAME=“–hostname-override=10.0.0.12”
KUBELET_API_SERVER=“–api-servers=http://10.0.0.11:8080”
KUBELET_POD_INFRA_CONTAINER=“–pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest”
KUBELET_ARGS=“”
/etc/kubernetes/config配置文件
[root@k8s-node-2 ~]# grep -Ev ‘^KaTeX parse error: Expected 'EOF', got '#' at position 2: |#̲' /etc/kubernet…|#’ /etc/kubernetes/kubelet
KUBELET_ADDRESS=“–address=0.0.0.0”
KUBELET_HOSTNAME=“–hostname-override=10.0.0.13”
KUBELET_API_SERVER=“–api-servers=http://10.0.0.11:8080”
KUBELET_POD_INFRA_CONTAINER=“–pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest”
KUBELET_ARGS=“”
启动
systemctl enable kubelet.service
systemctl start kubelet.service
systemctl enable kube-proxy.service
systemctl start kube-proxy.service
在master上查看集群中节点及节点状态
kubectl -s http://10.0.0.11:8080 get node
[root@k8s-master ~]# kubectl -s http://10.0.0.11:8080 get node
NAME STATUS AGE
10.0.0.12 Ready 49s
10.0.0.13 Ready 56s
[root@k8s-master ~]# kubectl get nodes
NAME STATUS AGE
10.0.0.12 Ready 1m
10.0.0.13 Ready 1m
至此Kubernetes基础部署完成
1.2.6 Kubernetes其他安装方法
二进制安装
kubuadm 安装
minikube 安装
ansible部署:https://github.com/gjmzj/kubeasz
1.3 创建覆盖网络–Flannel
1.3.1 配置Flannel(所有节点操作)
安装软件包
yum install flannel -y
修改配置文件
[root@k8s-master ~]# grep “1” /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS=“http://10.0.0.11:2379”
FLANNEL_ETCD_PREFIX=“/atomic.io/network”
1.3.2 配置etcd中关于flannel的key
Flannel使用Etcd进行配置,来保证多个Flannel实例之间的配置一致性,所以需要在etcd上进行如下配置:(‘/atomic.io/network/config’这个key与上文/etc/sysconfig/flannel中的配置项FLANNEL_ETCD_PREFIX是相对应的,错误的话启动就会出错)
配置网络范围
etcdctl mk /atomic.io/network/config ‘{ “Network”: “172.16.0.0/16” }’
操作创建网络
[root@k8s-master ~]# etcdctl mk /atomic.io/network/config ‘{ “Network”: “172.16.0.0/16” }’
{ “Network”: “172.16.0.0/16” }
master节点操作
systemctl enable flanneld.service
systemctl start flanneld.service
service docker restart
systemctl restart kube-apiserver.service
systemctl restart kube-controller-manager.service
systemctl restart kube-scheduler.service
node节点操作
systemctl enable flanneld.service
systemctl start flanneld.service
service docker restart
systemctl restart kubelet.service
systemctl restart kube-proxy.service
修改配置文件
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
rvice
systemctl restart kube-controller-manager.service
systemctl restart kube-scheduler.service
node节点操作
systemctl enable flanneld.service
systemctl start flanneld.service
service docker restart
systemctl restart kubelet.service
systemctl restart kube-proxy.service
修改配置文件
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-V2EMMm5P-1713329502365)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
a-Z ↩︎
更多推荐
所有评论(0)