Production-Grade Container Orchestration - Automated container deployment, scaling, and management.
生产级别的容器编排系统——自动化的容器部署、扩展和管理。
由于最近在学习微服务,所以就基于之前docker的基础上把玩一下k8s(Kubernetes),以了解基本概念和核心功能。
2. What's k8s?k8s涉及到很多基本概念,可以看十分钟带你理解Kubernetes核心概念快速了解。
下面这张图包含了k8s了核心组成模块:
这里就简单罗列以下:
k8s Master:k8s主节点,主要包括:
API Server:提供可以用来和集群交互的REST端点。
Replication Controller:用来创建和复制Pod。
Node:k8s节点,可以是虚拟机或物理机。其又包含以下组件:
Kubelet:是主节点代理。
Kube-proxy:Service使用其将链接路由到Pod,如上文所述。
Docker或Rocket:Kubernetes使用的容器技术来创建容器。
Pod:用来托管应用程序实例,包含:
Container:运行的容器
Volume:共享存储 (卷)
IP Address:IP 地址
Labels:标签,用于给pod打标签
Service:服务,由一组相同Label的Pod组成,其用来控制访问Pods的策略
3. 环境准备梳理完基本概念,我们来动手玩一玩吧。有三种玩法:一种就是跟随k8s官方的在线实验室进行实操;第二种就是基于Docker For Windows 中集成的k8s进行玩耍;第三种就是安装MiniKube捣鼓。这里选择第二种进行讲解。
PS:很多初学者在环境准备阶段遭遇挫折的后就直接放弃了,笔者为了搭建这个k8s环境也耗费了不少时日,其中包含一次重装系统,汗!希望下面的步骤助你k8s之行有个好的开端。
3.1. 在Docker for Windows中启用Kubernetes首先确保你已安装Docker for Windows。
因为那道墙,在Docker For Windows Client中启用Kubernetes,并没有想象的那么顺利。最后参照这篇文章成功启用:为中国用户在 Docker for Mac/Windows 中开启 Kubernetes。
如果安装了最新版本的docker for windows 客户端(v2.0.0.3),可参考以下步骤:
为 Docker daemon 配置 Docker Hub 的中国官方镜像加速 https://registry.docker-cn.com
git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop.git
cd k8s-for-docker-desktop
git checkout v2.0.0.2 (这一步很重要!!!)
Powell shell执行./load_images.ps1
Enable Kubernetes
执行kubectl cluster-info,输出以下,表示正常启动。
Kubernetes master is running at https://localhost:6445 KubeDNS is running at https://localhost:6445/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.环境搭建成功,你就成功了一半,请再接再厉动手完成以下实验!
4. 运行第一个Pod 4.1. 创建初始镜像1:首先我们执行dotnet new mvc -n K8s.NET.Demo 创建一个ASP.NET Core Mvc应用K8s.NET.Demo
修改HomeController如下所示:
修改Index.cshtml如下:
@{ ViewData["Title"] = "Home Page"; } <div> <h1>Welcome</h1> <h1>Host Name:@ViewBag.HostName</h1> <h1>Host IP:@ViewBag.HostIp</h1> <p>Learn about <a href="http://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p> </div>2:然后添加Dockerfile:
FROM microsoft/dotnet:sdk AS build-env WORKDIR /app # Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . ./ RUN dotnet publish -c Release -o out # Build runtime image FROM microsoft/dotnet:aspnetcore-runtime WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "K8s.NET.Demo.dll"]3:然后执行docker build -t k8s.net.demo .构造镜像,构造成功后执行docker images即可查看到名为k8s.net.demo的镜像。
4.2. 创建 pod 描述文件