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应用相关推荐

  1. 基于kubeadm快速部署kubernetes K8S V1.17.4集群-无坑完整版

    基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web页面,实现可视化查看Kubernetes资源 主机配置规划 服务器名称(hostname) ...

  2. Kubernetes单机部署-一键安装

    Kubernetes单机部署-一键安装 环境说明 安装步骤 Kubernetes的应用已经越来越广了,我们总是为他强大而神秘的功能所折服.总想自己也搭一套环境,奈何网上很多教程都存在或多或少的问题.遂 ...

  3. kubernetes_22_基于containerd部署kubernetes v1.20.5

    介绍 多年间,Docker.Kubernetes 被视为云计算时代下开发者的左膀右臂 Docker 作为一种开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的 Lin ...

  4. nacos 单机部署_nacos简介以及作为注册/配置中心与Eureka、apollo的选型比较

    一.Nacos简介 Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现.配置和管理. Nacos主要提供以下四大功能: 服务发现与服务健康检查 Nacos使服务更容易注册自己并 ...

  5. kind:Kubernetes in Docker,单机运行 Kubernetes 群集的最佳方案?

    作者:gc(at)sysin.org,主页:www.sysin.org 请访问原文发布链接:https://sysin.org/article/kind/,查看最新版. 是否没有足够的机器运行 Kub ...

  6. 基于 Win10 平台 搭建 Elasticsearch 集群

    基于 Win10 平台搭建 Elasticsearch 集群 1. 基本概念 1.1 单机和集群 1.2 节点 2. 部署集群 3. 启动集群 4. 测试集群 1. 基本概念 1.1 单机和集群 ✨单 ...

  7. 基于Python+Django的Kubernetes集群管理平台

    时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调度管理等方面都有其难以言喻的优 ...

  8. win10+vscode部署java开发环境

    目录 Java开发插件配置: 调试: 快捷键: 启动配置文件launch.json: 启动配置说明: Launch: Attach: User Setting: 遇到的问题: 参考: Java开发插件 ...

  9. 容器编排技术 -- 使用Minikube 部署 Kubernetes 集群

    容器编排技术 -- 使用Minikube 部署 Kubernetes 集群 单机部署 创建Kubernetes cluster(单机版)最简单的方法是minikube: 首先下载kubectl cur ...

最新文章

  1. cmake语法【一】
  2. python直方图hist用法参数详解
  3. Bzoj1835:[ZJOI2010]基站选址
  4. 服务器状态监控之一背景介绍及解决方案建议
  5. Spring Boot 缓存应用实践
  6. Forefront Client Security部署及配置
  7. Zabbix 3.2.6通过SNMP和iDRAC监控DELL服务器
  8. select函数返回值_Vue学习笔记之函数、高阶函数、v-model的应用
  9. guestfish修改镜像内容
  10. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_2_线程安全问题的代码实现...
  11. 随机信号功率谱估计方法matlab仿真
  12. Kepware配置OPC UA实现匿名or用户名/密码连接
  13. java反编译 luyten_Java——反编译工具 JD-GUI procyon-decompiler luyten crf (转)
  14. linux tomcat 验证码无法显示
  15. 计算机数字音乐合成技术 fm,● 计算机数字音乐合成技术主要有(13)两种方式,其中使用(14)合成的音乐,其音质更好。(13)A. FM和AM - 扁豆云问答...
  16. 使用javabean把小写金额转换成大写金额
  17. FastCAE 添加多语言
  18. CSS设置输入框默认文字颜色(webkit-input-placeholder等)
  19. 蜕变的过程总是痛苦的
  20. PowerQuery的数据获取界面(Excel及PowerBI)的异同-PowerQuery系列文章之二

热门文章

  1. 2021年电工(初级)考试题库及电工(初级)复审考试
  2. 华为OD机试题 - 找出重复代码(JavaScript)| 包含代码编写思路
  3. 智能电网如何巡检?这个方法才是标配
  4. 大数据的一些基本概念
  5. 前端基础全面的面试题
  6. Teradata使用笔记(2)--数据库操作
  7. div,span等标签支持focus/blur事件
  8. 微信小程序——获取用户unionId
  9. Android之MVP模式
  10. fprint函数与print函数