先看下docker swarm 架构
对比k8s 架构
etcd 是分布 存储
看下node架构
各组件实现细节
搭建一个单节点k8s 集群
通过minikube 查看官方文档首先要下载一个虚拟化工具 (我在windows上进行 安装了virtualbox)
参考说明:https://kubernetes.io/docs/tasks/tools/install-minikube/#cleanup-everything-to-start-fresh
安装完 virtualbox 接着安装kubectl ,下载完成 更改名称为 ,kubectl.exe
同样安装minikube
查看版本
接下来就可以创建单节点k8s
自动启动 virtualbox虚拟机
运行 minikube start (要能访问google)
查看集群状态
进入机器
运行 minikube ssh
查看运行的容器
查看
l
利用定义好的yaml 文件创建相应的资源,不如创建一个pod,定义的文件内容如下:
开始创建pod 资源
创建过程中
创建完成
可以看到运行nginx 的容器在minikube这个node上 ,可以进入容器;两种方法
1、连上minikube这个pod ,通过这个pod 进入容器
2、通过kubectl 直接进入
nginx容器地址在外部无法访问,通过端口映射把容器的80端口映射到外部主机8080端口
打开本地windows浏览器访问8080端口 可以访问
删除pod
ReplicaSet的创建
说到ReplicaSet对象,得先说说ReplicationController(简称为RC)。在旧版本的Kubernetes中,只有ReplicationController对象。它的主要作用是确保Pod以你指定的副本数运行,即如果有容器异常退出,会自动创建新的 Pod 来替代;而异常多出来的容器也会自动回收。可以说,通过ReplicationController,Kubernetes实现了集群的高可用性。
在新版本的 Kubernetes 中建议使用 ReplicaSet(简称为RS )来取代 ReplicationController。ReplicaSet 跟 ReplicationController 没有本质的不同,只是名字不一样,并且 ReplicaSet 支持集合式的 selector(ReplicationController 仅支持等式)
Kubernetes官方强烈建议避免直接使用ReplicaSet,而应该通过Deployment来创建RS和Pod。
由于ReplicaSet是ReplicationController的代替物,因此用法基本相同,唯一的区别在于ReplicaSet支持集合式的selector。
删除一个pod 看看效果,发现删除一个pod 后会再自动创建一个 ,因为通过ReplicaSet 指定了3个 会自动维持pod数目
扩展:
比RepliSet 或ReplicationController 更好的方式是通过Deployment (https://kubernetes.io/docs/concepts/workloads/controllers/deployment/)
Deployment可以创建或更新RepliSet和pods,示例文件:
开始创建:
更新镜像:
可以看到会把旧的pods 删除 创建新的
查看rs 旧的没用了
回退到以前的版本
让外部可以访问内部 通过expose 以服务形式暴露给外面主机
参考文章:
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#writing-a-deployment-spec
https://kubernetes.io/docs/tasks/tools/install-minikube/#cleanup-everything-to-start-fresh
https://www.jianshu.com/p/fd8d8d51741e