阅读目录:
Docker 应用: Hello World https://www.cnblogs.com/lanxiaoke/p/10432631.html
Docker 应用: Docker-compose(容器编排) https://www.cnblogs.com/lanxiaoke/p/10439282.html
前言:
终于出第三篇了, 上个月就已经弄好了, 一直没弄上来, 步入正题之前有 3 个建议给想要学习 Kubernetes 的同学.
1, 在国内因为防火墙的原因, 你是不可能在 Docker 上在线开启的 Kubernetes 功能的. 所以如果你会 fan qiang 上网, 那万事大吉.
2, 如果你离香港澳门比较近, 那建议你周末抽空过去一趟, 上午买罐奶粉, 在店里吃个便餐顺便上网把 Kubernetes 功能开启了,
一天时间不用. 又能旅游散心, 又把事情办了, 一举多得, 还是万事大吉.
3, 如果上面 2 种你都没有条件, 那真的很遗憾, 你要控制住你的双手, 一不注意, 你可能会把电脑砸掉. 还要准备菊花茶, 清热解毒
以免怒火攻心长痘痘, 板蓝根小柴胡也要买点, 不然你气愤身体忽冷忽热的容易感冒.
好了, 说这些是想告诉你, 你如果不能在线开启 Kubernetes 功能, 那将浪费很多很多.. 的时间, 别人不知道, 反正我就是断断续续的
加起来可能至少 2 个星期才完成. 而且我后边也不会把解决过程发出来, 太罗嗦, 有怒气你们直接怼防火墙就对了, 机智. jpg
一, Kubernetes 简单介绍
1,Kubernetes 简单点说就是关于 Docker 的集群方案, 具体介绍请可以点击这里, 在之前 2 章中都只是介绍了单机, 单运用的开发情况, 但是
很明显这是不够的, 互联网时代, 一个完整的系统可能由几十, 几百个子系统组成, 这不可能都部署在一台机器上, 所以单机单应用的 Docker
部署方案最多运用在企业内部小系统上, 超出这个范围就要考虑 docker 集群了, 这就引出 Kubernetes, 他就是专为 Docker 集群而生的.
2,Kubernetes 功能模块可以分为:
- Container(容器)
- Pod(容器组)
- Label(标签)
- Replication Controller(复制控制器)
- Service(服务)
- Node(节点)
- Kubernetes Master(Kubernetes 主节点)
Container,Pod 这 2 个都是关于容器的, 比较好理解, Label 可以理解为对 Pod 的标识,
Replication Controller 则是实现 Pod 拷贝的功能, 负载均衡应该就是他完成的, Node(节点),Kubernetes Master(Kubernetes 主节点)
比较好理解, 主要是 YAML 格式编写要熟练, 后续讲到.
3,Kubernetes 模块图示, 直接摘抄了啊
二, 开启 Kubernetes
1, 先来看看, Kubernetes 启动成功后是有 2 个 running 的, 启动失败那个 Kubernetes 会一直提示 "** is starting", 直到永远.
2, 验证一下, 在 PowerShell 中输入以下指令查看 Kubernete 版本
1 kubectl version
三, 部署 web 镜像
1, 新建 WebMVC 项目, 修改 HomeController
- public class HomeController : Controller
- {
- public IActionResult Index()
- {
- ViewData["Message"] = string.Format("IP:{0}", Dns.GetHostAddresses(Dns.GetHostName()).FirstOrDefault());
- return View();
- }
- ....
- }
2, 编写 Dockerfile
- FROM microsoft/dotnet:2.1-sdk AS build
- WORKDIR /App
- # copy csproj and restore as distinct layers
- COPY *.sln .
- COPY WebApp-HelloWorld/*.csproj ./WebApp-HelloWorld/
- RUN dotnet restore
- # copy everything else and build App
- COPY WebApp-HelloWorld/. ./WebApp-HelloWorld/
- WORKDIR /App/WebApp-HelloWorld
- RUN dotnet publish -c Release -o out
- FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime
- WORKDIR /App
- COPY --from=build /App/WebApp-HelloWorld/out ./
- ENTRYPOINT ["dotnet", "WebApp-HelloWorld.dll"]
运行 docker build -t helloworld . , 要先创建镜像, 后边的 kubernete 才能用
3, 编写 kubernete-Web-pod.YAML
- apiVersion: v1
- kind: Pod
- metadata:
- name: kubernete-Web-pod
- labels:
- App: kubernete-Web-pod
- spec:
- containers:
- - name: helloworld
- image: helloworld
- imagePullPolicy: IfNotPresent
- ports:
- - containerPort: 80
4, 创建 Pod
- kubectl create -f kubernete-Web-pod.YAML
- kubectl get pod
5, 暴露容器地址
1 kubectl port-forward kubernete-Web-pod 8010:80
6, 浏览器访问
搞定!
四, 容器集群
1, 创建 kubernete-Web-replicaset.YAML
- apiVersion: apps/v1
- kind: ReplicaSet
- metadata:
- name: kubernete-Web-replicaset
- spec:
- replicas: 3 # pod 实例的个数
- selector:
- matchLabels: # 标签名称
- App: kubernete-Web-pod
- template:
- metadata:
- labels:
- App: kubernete-Web-pod
- spec:
- containers:
- - name: kubernete-Web-replicaset
- image: helloworld
- imagePullPolicy: IfNotPresent
2, 执行指令
1 kubectl create -f kubernete-Web-replicaset.YAML
3, 创建 Service 统一入口
1 kubectl expose replicaset kubernete-Web-replicaset --type=loadBalancer --port=8020 --target-port=80 --name kubernete-Web-service
这样就构成了集群负载均衡了, 我们在浏览器上试试
3, 开 3 个窗口 http://localhost:8020/
大功告成!..... 回家
来源: http://www.bubuko.com/infodetail-3024648.html