基于Win10单机部署kubernetes应用
01 引子
鸽了好久了,终于又一次克服了拖延症,决心写点啥,起因也是因为最近刚好重做了系统,把win10从home版升级到了专业版,可以愉快的安装docker destop 而不需要借助 docker toolbox了。 这个使用体验的提升真的是很不错。无论是配置,还是运行容器的可视化,还是一些辅助工具,真的友好了很多,降低了使用门槛。
02 Kubernetes
k8s 这个名字,起源于古希腊,是舵手的意思,所以它的 logo 即像一张渔网又像一个罗盘,谷歌选择这个名字还有一个深意:既然docker把自己比作一只鲸鱼,驮着集装箱,在大海上遨游,google 就要用Kubernetes去掌握大航海时代的话语权,去捕获和指引着这条鲸鱼按照主人设定的路线去巡游。
K8s将集群中的机器划分为一个Master节点和一群工作节点Node。Master节点上运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler。这些进程自动化实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能。
上图可以看到如下组件,使用特别的图标表示Service和Label:
Kubernetes Master(Kubernetes主节点)
Node(节点)
Pod
Container(容器)
Label(label)(标签)
Replication Controller(复制控制器)
Service(enter image description here)(服务)
Kubernetes Master
Master指的是集群控制节点。每个K8s集群里需要有一个Ms节点负责整个集群的管理和控制。Kubernetes Master提供集群的独特视角,并且拥有一系列组件。
Kubernetes API Server(kube-apiserver),侍卫大统领!提供HTTP Rest接口的关键服务进程,是K8s里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程。API Server提供可以用来和集群交互的Rest端点。
Kubernetes Controller Master(kube-controller-manager)掌印大太监,大总管!K8s里所有资源对象的自动化控制中心。
Kubernetes Scheduler(kube-scheduler),御马间的调度室!负责资源调度(Pod调度)的进程。创建和复制Pod的Replication Controller
Node
节点(上图橘色方框)是物理或者虚拟机器,作为Kubernetes worker,通常称为Minion。每个节点都运行如下Kubernetes关键组件。
(1) Kubelet:与Master节点协作,是主节点的代理,负责Pod对应容器的创建,启动,停止等任务。默认情况下Kubelet会向Master注册自己。Kubelet定期向主机点汇报加入集群的Node的各类信息。
(2) Kube-proxy:Kubernetes Service使用其将链接路由到Pod,作为外部负载均衡器使用,在一定数量的Pod之间均衡流量。比如,对于负载均衡Web流量很有用。
(3) Docker或Rocket:Kubernetes使用的容器技术来创建容器。
Pod
Pod是K8s最重要也是最基础的概念!每个Pod都有一个特殊的被称为“根容器”的Pause容器,此容器与引入业务无关并且不易死亡。且以它的状态代表整个容器组的状态!Pause容器对应的镜像属于K8s平台的一部分,除了Pause容器,每个Pod还包含一个或多个用户业务容器。Pod其实有两种类型:普通的Pod及静态Pod(static Pod),static Pod并不存放在Kubemetes的eted存储里,而是存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动运行。而普通的Pod一旦被创建,就会被放入到etcd中存储,确后会被KubernetesMaster调度到某个具体的Node上并进行绑定(Binding),随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并启动起来。在默认情况下,当Pod里的某个容器停止时,Kubemetes会自动检测到这个问题并且重新启动这个Pod(重启Podel)的所有容器),如果Pod所在的Node完机,则会将这个Node上的所有Pod重新调度到其他节点上。Pod(上图绿色方框)安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。
Endpoint(Pod IP + ContainerPort) pod ip:一个Pod里多个容器共享Pod IP地址。K8s要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,使用虚拟二层网络技术(Flannel(没有接触过 ),OpenvSwitch)实现。在Vmware中类似的二层交换技术是VSwitch,当然了,现在整个数据中心网络二层逐步从vSwitch—>OpenvSwitch
Lable
Lable类似Docker中的tag,一个是对“特殊”镜像、容器、卷组等各种资源做标记,一个是attach到各种诸如Node、Pod、Server、RC资源对象上。不同的是Lable是一对键值对!Lable类似Tag,可使用K8s专有的标签选择器(Label Selector)进行组合查询。
Replication Controller
Replication Controller,简称RC,她用来干啥呢?就是通过她来实现Pod副本数量的自动控制!RC确保任意时间都有指定数量的Pod“副本”在运行。
如果为某个Pod创建了RC并且指定3个副本,它会创建3个Pod,并且持续监控它们。如果某个Pod不响应,那么Replication Controller会替换它,保持总数为3。如果之前不响应的Pod恢复了,现在就有4个Pod了,那么Replication Controller会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Replication Controller会立刻启动2个新Pod,保证总数为5。还可以按照这样的方式缩小Pod,这个特性在执行滚动升级时很有用。
注意:删除RC,不会影响该RC已经创建好的Pod。在逻辑上Pod副本和RC是解耦和的!创建RC时,需要指定Pod模板(用来创建Pod副本的模板)和Label(RC需要监控的Pod标签)。
由Replication Controller衍生出Deployment,与RC相似90%,目的是更好地解决Pod编排。暂时不讨论。
Horizontal Pod Autoscaler,简称HPA,Pod横向自动扩容智能控件。与RC,Deployment一样,也属于K8s的一种资源对象。她的实现原理是通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否针对性地调整目标Pod的副本数。
Service
微服务架构中的一个“微服务”,她是正真的新娘,而之前的Pod,RC等资源对象其实都是嫁衣。
每个Pod都会被分配一个单独的IP地址,而且每个Pod都提供了一个独立的Endpoint(Pod lP + ContainerPort)以被客户端访问,现在多个Pod副本组成了一个集群来提供服务,客户端要想访问集群,一般的做法是部署一个负载均衡器(软件或硬件),为这组Pod开启一个对外的服务端口如8000端口,并且将这些Pod的Endpoint列表加入8000端口的转发列表中,客户端就可以通过负载均衡器的对外IP地址 + 服务端口来访问此服务,而客户端的请求最后会被转发到哪个Pod,则由负载均衡器的算法所决定。
K8s的server定义了一个服务的访问入口地址,前端(Pod)通过入口地址访问其背后的一组由Pod副本组成的集群实例,service与其后端Pod副本集群之间通过Label Selector 实现“无缝对接”。
03 Minikube
minikube相当于一个运行在本地的Kubernetes单节点,我们可以在里面创建Pods来创建对应的服务。
Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a VM on your laptop for users looking to try out Kubernetes or develop with it day-to-day
04 安装
说的安装,还得奉劝大家提前沐浴更衣,调整好心态。倒不是因为步骤有多难,多复杂,而是因为某些网站因为技术不成熟,你始终访问不到,而焦躁。关于minikube,一些网上人说使用阿里的包,可能福报厂确实拉了分支,改了拉取镜像的地址,但是他们并没有提供编译好的版本,所以使用官方的版本就好。https://github.com/kubernetes/minikube 。
另外,一定要注意使用release版本(我用1.9.2版),别下测试版,为什么这么提醒?反正我没有因为版本问题,卡了2天,demo都没跑出来。
kubectl 也从官方下载 https://kubernetes.io/docs/tasks/tools/install-kubectl/ 即可。
将两个文件放到一个文件夹下,然后在环境变量里path一下
安装docker 不是主要矛盾,大家自行搜一下,只要确认好环境,再次强调最好升级一下win10,这样操作起来更方便一些,docker toolbox用起来真的不行。
在正式安装之前,还需要设置一个虚拟交换机
接下来,就是安装k8s环境了,记得使用管理员Prowshell
minikube start --image-mirror-country=cn --registry-mirror=https://registry.docker-cn.com --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --hyperv-virtual-switch="minikubaSwitch"
参数说明:
天朝专用参数
--image-mirror-country=cn
国内docker registry
--registry-mirror=https://registry.docker-cn.com
国内镜像源
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
外部交换机
--hyperv-virtual-switch="minikubaSwitch"
接下来就是漫长的等待,安装成功后,会多出一个minikube的虚拟机
重点来了啊,如果之前下载失败了,到自己的用户下面把这个.minikube文件夹删除了,重新来一边,如果还是不行,继续删了重来,不要问为什么,问就是上网需要科学。
接下来就需要部署 deployment
PS E:\devlop\envs\k8s\test1> kubectl create -f 1.yml
deployment.apps/datalookerserver created
使用下面的 yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: datalookerserver
spec:
selector:
matchLabels:
app: datalookerserver
replicas: 2
template:
metadata:
labels:
app: datalookerserver
spec:
containers:
- name: datalookerserver
image: nginx
# nginx
#datalooker-server:1.0-SNAPSHOT
imagePullPolicy: Always
ports:
- containerPort: 80
这里注意image属性,还是使用公网的image,这样比较容易通过,使用本地registry可能因为链路访问问题,导致失败,具体情况,可以异步到参考链接【2】,里面对这个问题有一个比较清楚的阐释。
接下来,可以使用 kubectl get Pods -o wide 查看pod状态
使用, kubectl describe pod datalookerserver-56dbc49bc8-6sdms可以查看具体pod的具体信息
接下来使用相同的指令,创建service
PS E:\devlop\envs\k8s\test1> kubectl create -f 2.yml
service/datalookerserver created
yml如下:
apiVersion: v1
kind: Service
metadata:
name: datalookerserver
spec:
ports:
- port: 9999 # 服务端口
protocol: TCP
targetPort: 80 # 容器端口
selector:
app: datalookerserver # 标签选择器,这里的app=web正是我们刚才建立app
使用 minikube dashboard 命令,可以打开网页来对单机集群进行监控
现在,一个整体的简单应用构建起来了,那么我们如何访问呢?
还需要将端口映射出来,我们才能访问
kubectl port-forward svc/datalookerserver 9999:9999
测试一下OK了
参考链接:
[1] https://www.jianshu.com/p/f4c2104ba90a
[2] https://hasura.io/blog/sharing-a-local-registry-for-minikube-37c7240d0615/
[3] https://www.javaroad.cn/questions/304667
[4] https://www.jianshu.com/p/7cc5f727c225
[5] https://zhuanlan.zhihu.com/p/88236691
基于Win10单机部署kubernetes应用相关推荐
- 基于kubeadm快速部署kubernetes K8S V1.17.4集群-无坑完整版
基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web页面,实现可视化查看Kubernetes资源 主机配置规划 服务器名称(hostname) ...
- Kubernetes单机部署-一键安装
Kubernetes单机部署-一键安装 环境说明 安装步骤 Kubernetes的应用已经越来越广了,我们总是为他强大而神秘的功能所折服.总想自己也搭一套环境,奈何网上很多教程都存在或多或少的问题.遂 ...
- kubernetes_22_基于containerd部署kubernetes v1.20.5
介绍 多年间,Docker.Kubernetes 被视为云计算时代下开发者的左膀右臂 Docker 作为一种开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的 Lin ...
- nacos 单机部署_nacos简介以及作为注册/配置中心与Eureka、apollo的选型比较
一.Nacos简介 Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现.配置和管理. Nacos主要提供以下四大功能: 服务发现与服务健康检查 Nacos使服务更容易注册自己并 ...
- kind:Kubernetes in Docker,单机运行 Kubernetes 群集的最佳方案?
作者:gc(at)sysin.org,主页:www.sysin.org 请访问原文发布链接:https://sysin.org/article/kind/,查看最新版. 是否没有足够的机器运行 Kub ...
- 基于 Win10 平台 搭建 Elasticsearch 集群
基于 Win10 平台搭建 Elasticsearch 集群 1. 基本概念 1.1 单机和集群 1.2 节点 2. 部署集群 3. 启动集群 4. 测试集群 1. 基本概念 1.1 单机和集群 ✨单 ...
- 基于Python+Django的Kubernetes集群管理平台
时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调度管理等方面都有其难以言喻的优 ...
- win10+vscode部署java开发环境
目录 Java开发插件配置: 调试: 快捷键: 启动配置文件launch.json: 启动配置说明: Launch: Attach: User Setting: 遇到的问题: 参考: Java开发插件 ...
- 容器编排技术 -- 使用Minikube 部署 Kubernetes 集群
容器编排技术 -- 使用Minikube 部署 Kubernetes 集群 单机部署 创建Kubernetes cluster(单机版)最简单的方法是minikube: 首先下载kubectl cur ...
最新文章
- cmake语法【一】
- python直方图hist用法参数详解
- Bzoj1835:[ZJOI2010]基站选址
- 服务器状态监控之一背景介绍及解决方案建议
- Spring Boot 缓存应用实践
- Forefront Client Security部署及配置
- Zabbix 3.2.6通过SNMP和iDRAC监控DELL服务器
- select函数返回值_Vue学习笔记之函数、高阶函数、v-model的应用
- guestfish修改镜像内容
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_2_线程安全问题的代码实现...
- 随机信号功率谱估计方法matlab仿真
- Kepware配置OPC UA实现匿名or用户名/密码连接
- java反编译 luyten_Java——反编译工具 JD-GUI procyon-decompiler luyten crf (转)
- linux tomcat 验证码无法显示
- 计算机数字音乐合成技术 fm,● 计算机数字音乐合成技术主要有(13)两种方式,其中使用(14)合成的音乐,其音质更好。(13)A. FM和AM - 扁豆云问答...
- 使用javabean把小写金额转换成大写金额
- FastCAE 添加多语言
- CSS设置输入框默认文字颜色(webkit-input-placeholder等)
- 蜕变的过程总是痛苦的
- PowerQuery的数据获取界面(Excel及PowerBI)的异同-PowerQuery系列文章之二