Kubernetes入门实践(环境搭建)
容器技术只是解决了运维部署工作中的一个很小的问题,在现实生产环境中,除了最基本的安装,还会各式各样的需求,比如服务发现、负载均衡、状态监控、健康检查、扩容缩容、应用迁移、高可用等等。这些容器之上的管理、调度工作就是容器编排

Kubernetes 从0到0.1
是一个生产级别的容器编排平台和集群管理系统,能够创建和调度容器,还能监控,还能够监控和管理服务器,可谓i是云时代下的操作系统
安装minikube
对于个人来讲,使用minikube即可,这是一个迷你版Kubernetes,在Linux安装:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
安装完成后使用minikube -version即可查看版本号,输入minikube kubectl安装kubectl,这个工具的作用是与Kubernetes后台进行通信
启动minikube
如下启动minikube,后面指定了版本号1.23.3
$ minikube start --kubernetes-version=v1.23.3
minikube v1.26.0 on Ubuntu 20.04
Automatically selected the virtualbox driver. Other choices: ssh, none
......
使用minikube status查看运行状态:
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
使用minikube node list查看节点列表
$ minikube node list
minikube 192.168.59.100
目前Kubernetes集群只有1个节点,名字就叫minikube,IP是192.168.59.100
可以使用命令登录到这个节点上:
$ minikube ssh
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
$ uname -a
Linux minikube 5.10.57 #1 SMP Thu Jun 16 23:36:20 UTC 2022 x86_64 GNU/Linux
$ exit
logout
实例: 运行Nginx
kubctl使用run命令运行,使用--image指定镜像:
$ minikube kubectl -- run ngx --image=nginx:alpine
> kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubectl: 44.43 MiB / 44.43 MiB [-------------] 100.00% 10.17 MiB p/s 4.6s
pod/ngx created
把Kubenetes里的容器称作Pod,使用get pod查看正在运行的容器:
$ minikube kubectl -- get pod
NAME READY STATUS RESTARTS AGE
ngx 1/1 Running 0 2m40s
Kubernetes基本架构
Kubernetes的管理目标是大规模的集群和应用,必须能够将系统抽象到足够高的层次,分解出一些松耦合的对象才能简化系统模型,如下是架构图:

Kubernetes 采用了控制面 / 数据面(Control Plane / Data Plane)架构,集群里的计算机被称为节点(Node),可以是实机也可以是虚机,少量的节点用作控制面来执行集群的管理维护工作,其他的大部分节点都被划归数据面,用来跑业务应用
控制面的节点在Kubernetes里叫做Master Node,一般简称为Master,它是整个集群里最重要的部分,可以说是Kubernetes的大脑和心脏,数据面的节点叫做Worker Node,一般简称为Worker或Node
数据面的节点叫做Worker Node,一般简称为Worker或者Node,在Master控制下完成任务。Node的数量非常多,构成了一个资源池,Kubernetes在这个池中分配资源,调度应用
节点内部结构
Kubernetes的节点内部具有复杂的结构,是由许多的模块构成的,这些模块分为组件(Component)和插件(Addon)两类,组件实现了Kubernetes的核心功能特性,插件为其扩展功能
Master组件
4个组件: apiserver、etcd、scheduler、controller-manager
apiserver是Master节点的唯一入口,也是整个Kubernetes系统的唯一入口,对外公开了一系列的RESTful API,并且加上了验证、授权等功能,所有其他组件都只能和它直接通信
etcd是一个高可用的分布式Key-Value数据库,用来持久化存储系统里的各种资源对象和状态,相当于Kubernetes里的配置管理员
scheduler负责容器的编排工作,检查节点的资源状态,把Pod调度到最适合的节点上运行,相当于部署人员,因为节点状态和Pod信息都存储在etcd里,所以scheduler必须通过apiserver才能获得
controller-manager负责维护容器和节点等资源的状态,实现故障检测、服务迁移、应用伸缩等功能,起到监控运维的作用
这4个组件都被容器化了,运行在集群的Pod里,使用命令可以查看:
$ minikube kubectl -- get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-64897985d-bg4kx 1/1 Running 1 (12m ago) 13h
etcd-minikube 1/1 Running 1 (12m ago) 13h
kube-apiserver-minikube 1/1 Running 1 (12m ago) 13h
kube-controller-manager-minikube 1/1 Running 1 (12m ago) 13h
kube-proxy-xqx2n 1/1 Running 1 (12m ago) 13h
kube-scheduler-minikube 1/1 Running 1 (12m ago) 13h
storage-provisioner 1/1 Running 2 (11m ago) 13h
Node组件
3个组件: kubelet、kube-proxy、container-runtime
kubelet是Node代理,负责管理Node相关的绝大部分操作,Node上只有它能够与apiserver进行通信,实现状态报告,命令下发,启停容器等功能
kube-proxy是Node的网络代理,只负责管理容器的网络通信,为Pod转发TCP/UDP数据包
container-runtime是容器和镜像的实际使用者,在kubelet的指挥下创建容器,管理Pod的生命周期
这3个组件只有kube-proxy被容器化
使用minikube ssh登录节点,输入如下命令查看这个容器:
$ docker ps | grep kube-proxy
345928bf22b1 9b7cc9982109 "/usr/local/bin/kube…" 20 minutes ago Up 20 minutes k8s_kube-proxy_kube-proxy-xqx2n_kube-system_97832cdd-8a91-41f0-a557-c0be9af17966_1
kubelet没有被容器化,所有用进程查看命令来查看
$ ps -ef | grep kubelet
root 1306 1 2 03:22 ? 00:00:39 /var/lib/minikube/binaries/v1.23.3/kubelet
综上所述:
每个Node上的kubelet会定期向apiserver上报节点状态,apiserver再存到etcd中
每个Node上的kube-proxy实现了TCP/UDP反向代理,让容器对外提供稳定的服务
scheduler通过apiserver得到当前的节点状态,调度Pod,然后apiserver下发命令给某个Node的kubelet,kubelet调用container-runtime的启动容器
controller-manager也通过apiserver得到实时的节点状态,监控可能的异常情况
节点插件
输入如下命令显示插件列表:
$ minikube addons list
|-----------------------------|----------|--------------|--------------------------------|
| ADDON NAME | PROFILE | STATUS | MAINTAINER |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador | minikube | disabled | 3rd party (Ambassador) |
| auto-pause | minikube | disabled | Google |
| csi-hostpath-driver | minikube | disabled | Kubernetes |
| dashboard | minikube | disabled | Kubernetes |
| default-storageclass | minikube | enabled | Kubernetes |
| efk | minikube | disabled | 3rd party (Elastic) |
| freshpod | minikube | disabled | Google |
| gcp-auth | minikube | disabled | Google |
| gvisor | minikube | disabled | Google |
| headlamp | minikube | disabled | kinvolk.io |
| helm-tiller | minikube | disabled | 3rd party (Helm) |
....
有两个比较重要的插件:DNS和Dashboard
DNS在集群中实现了域名解析服务,允许用域名解析而非IP地址的方式来进行通信,是服务发现和负载均衡的基础
Dashboard是仪表盘,为Kubernetes提供了一个图形化的操作界面,执行minikube dashboard就能自动打开:

Kubernetes入门实践(环境搭建)的更多相关文章
- 微服务 + Docker + Kubernetes 入门实践 目录
微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...
- 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建
003-PHP基础-01-PHP快速入门 03-PHP环境搭建 1.客户端(浏览器) IE FireFox CHROME Opera Safari 2.服务器 是运行网站的基本 是放置程序代码的地方 ...
- Android入门之环境搭建
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/1376935560.html 原创:An ...
- scala 入门Eclipse环境搭建
scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld IDE选择并下载: scala for eclipse 下载: http://scala-ide.org/downloa ...
- 新手嘛,先学习下 Vue2.0 新手入门 — 从环境搭建到发布
Vue2.0 新手入门 — 从环境搭建到发布 转自:http://www.runoob.com/w3cnote/vue2-start-coding.html 具体文章详细就不搬了,步骤可过去看,我这就 ...
- scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld
scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld 学习了: http://blog.csdn.net/wangmuming/article/details/3407911 ...
- 总结Vue 第四天:vue-cli(Vue2.0 新手入门 — 从环境搭建到发布)
总结Vue 第四天:vue-cli(Vue2.0 新手入门 - 从环境搭建到发布) 一.Vue CLI----(Vue2.0 新手入门 - 从环境搭建到发布): ■ CLI是Command-Lin ...
- Elasticsearch快速入门和环境搭建
内容概述 什么是Elasticsearch,为什么要使用它? 基础概念简介 节点(node) 索引(index) 类型映射(mapping) 文档(doc) 本地环境搭建,创建第一个index 常用R ...
- JAVA WEB快速入门之环境搭建
前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得 ...
- OpenCV3入门1—环境搭建与实验
1.环境搭建 1.1 VS2017开发环境搭建 1).下载软件包 https://opencv.org/ 2).配置环境变量 配置win10系统环境变量,把下面路径添加到path. D:\WORK\5 ...
随机推荐
- 实验一 Linux系统与应用课程准备
項目 內容 这个作业属于哪个课程 班级课程主要链接 这个作业的要求在哪里 作业要求链接 学号-姓名 15043109-吴小怀 作业学习目标 学会在博客园社区中学习Linux的使用技巧,熟练使用Typo ...
- Java基础进阶内容 - 随笔
JAVA进阶 1 对象序列化 1.1 对象要序列化要实现Serializable接口 1.2 然后通过ObjectInputStream 对象读入流来读入一个对象 new ObjectOutputSt ...
- cerebro简单使用 , ES界面化工具 , 网页查看 , 操作索引
下载安装 下载地址 https://github.com/lmenezes/cerebro/releases 解压即用 , 目录中不能有空格和中文 需要jdk11及以上(实际我本机只有jdk8也能用) ...
- 2020/513-笔记:怎么知道Oracle数据库一个中文汉字占几个字节
1. 执行语句: select userenv('language') from dual; 如果显示如下: SIMPLIFIED CHINESE_CH ...
- Servlet's characters of get and post
Tomcat默认是使用ISO8859-1来解码的,ISO8859-1是不支持中文的. 1.post请求解决乱码原因: 服务器不知道按哪种编码来处理HTML等文件来响应给浏览器的,所以处理post请求时 ...
- Java--接口和抽象类有什么区别
他们都不能实例化对象,都可以包含抽象方法,而且抽象方法必须被继承的类全部实现. 区别: 1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实 ...
- SpringCloud微服务实战——搭建企业级开发框架(五十一):微服务安全加固—自定义Gateway拦截器实现防止SQL注入/XSS攻击
SQL注入是常见的系统安全问题之一,用户通过特定方式向系统发送SQL脚本,可直接自定义操作系统数据库,如果系统没有对SQL注入进行拦截,那么用户甚至可以直接对数据库进行增删改查等操作. XSS ...
- 一篇文章带你了解Java中的运算符
前言 在前一篇文章中,壹哥给大家讲解了Java数据类型之间的转换,包括自动类型转换.强制类型转换.隐含的强制类型转换等问题.且在上一篇文章中,我还简单地给大家提到了Java的类型提升.在类型提升的案例 ...
- ks.cfg 怎么读取光盘 (cdrom) 上的文件并执行对应的脚本
ks.cfg 文件怎么实现读取光盘 (CDROM) 上的内容并执行自定义脚本我们知道 linux 系统安装过程中,要想实现自动化安装,一般都是利用 Kickstart 这个工具实现,最重要的就是其配置 ...
- 递推求解DAG最长路径长度及最长路径条数
说明 在一般图中,求解最长路或最短路只能通过最短路算法解决 但是在DAG中,由于不存在环,因此可以通过递推,以线性复杂度计算处最长路或最短路.当然需要首先对有向图进行Tarjan缩点转化为DAG 例题 ...