在上一篇文章 Ubuntu 18 Kubernetes的Install and Deploy 我们在ubuntu在部署了k8s集群, 今天来看看windows下怎么搞。

主要点有:

1) windows 下搭建k8s 单节点

2)ap.net core 制作和发布镜像 ,重点在于发布到私有的harbor上(Ubuntu18 安装搭建Harbor​​​​​​​)

3)部署到k8s集群上

安装

1.下载 k8s-for-docker-desktop,前查看自己docker的版本(我这里是19.03.1所以直接下载master),然后下载对应的分支

2.切换到对应的目录,开始加载镜像,这里通过PowerShell的方式加载: .\load_images.ps1 (也可以通过Bash Shell的方式加载:./load_images.sh), 如果出现:在此系统上禁止运行脚本 的错误,通过执行 set-ExecutionPolicy RemoteSigned 可以解决

拉取完毕后(需要检查是否全部成功拉取) 需要在在Docker for Windows中启用K8S

配置K8s

1.切换运行上下文至docker-for-desktop ,验证Kubernetes状态(目前是单节点)

kubectl config use-context docker-for-desktop
kubectl cluster-info
kubectl get nodes

2.部署Kubernetes Dashboard& 开启API Server访问代理,向外部提供面板访问

kubectl create -f kubernetes-dashboard.yaml #需要在k8s-for-docker-desktop 目录下执行
kubectl proxy --address='0.0.0.0' --port= --accept-hosts='^*$'

创建用户并获取token

kubectl create serviceaccount dashboard -n default
kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard
kubectl -n kube-system get secret
kubectl -n kube-system describe secret <name>


访问http://localhost:8008/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login 如图:

输入token后

准备一个k8sWebApi

在创建webapi项目的(创建的时候选择启用docker 会自动生成Dockerfiel文件)

然后切换到目录自作镜像 并发布到私有仓库:(有关harbor请参考 Ubuntu18 安装搭建Harbor

docker build -t k8swebapi .
#给镜像打tag(镜像的格式为,镜像仓库IP:端口/镜像名称)
docker tag k8swebapi 192.168.100.3:/repo-test/k8swebapi:
docker push 192.168.100.3:/repo-test/k8swebapi

为了保险 我们找一个docker 环境验证一下:

部署webapi到k8s

1.准备namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
name: aspnetcore
labels:
name: aspnetcore

deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: k8swebapi
namespace: aspnetcore
labels:
name: k8swebapi
spec:
replicas:
selector:
matchLabels:
name: k8swebapi
template:
metadata:
labels:
name: k8swebapi
spec:
imagePullSecrets:
- name: regsecret
containers:
- name: k8swebapi
image: 192.168.100.3:/repo-test/k8swebapi:
ports:
- containerPort:
imagePullPolicy: Always --- kind: Service
apiVersion: v1
metadata:
name: k8swebapi
namespace: aspnetcore
spec:
type: NodePort
ports:
- port:
targetPort:
selector:
name: k8swebapi

这里这个deploy.yaml就会告诉K8S关于你的API的所有信息,以及通过什么样的方式暴露出来让外部访问。需要注意的是,这里我们提前为要部署的ASP.NET Core WebAPI项目创建了一个namespace,叫做aspnetcore,因此这里写的namespace : aspnetcore。K8S中通过标签来区分不同的服务,因此这里统一name写成了k8swebapi。在多实例的配置上,通过replicas : 2这个设置告诉K8S给我启动2个实例起来,当然你可以写更大的一个数量值。 最后,在spec中告诉K8S我要通过NodePort的方式暴露出来公开访问。这里因为是私有的harbor所以需要创建regsecret认证,然后在deploy文件引用它:有关向信息可以参考https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

kubectl create secret docker-registry regsecret --docker-server=192.168.100.3: --docker-username=admin --docker-password=xxx -n=aspnetcore
#kubectl delete secret regsecret  -n=aspnetcore

注意我们的deploy是有名称空间的, 所以在创建 secret的时候必须指定-n=aspnetcore

2.通过kubectl部署到K8S (以下操作在ubuntu下的k8s集群同样适用)

首先,确保你的Docker for Windows以及Kubernetes都启动起来了。然后,在Powershell中通过kubectl完成API的部署,然后验证,

kubectl apply -f namespace.yaml
kubectl apply -f deploy.yaml
kubectl get svc -n aspnetcore
#删除的时候顺序要倒过来
#kubectl delete -f deploy.yaml
#kubectl delete -f namespace.yaml

#查看k8swebapi状态
kubectl get deployment k8swebapi -n aspnetcore
kubectl describe deployment k8swebapi -n aspnetcore
kubectl describe replicaset -n aspnetcore #查看ReplicaSet的状态
kubectl describe pod -n aspnetcore #查看Pod的状态

我这里的http://localhost:xxx/api/values 在ubuntu下是不能访问的(在windows下的k8s 是1.14.3,ubuntu是1.15.2 估计是版本的问题)

3.在K8S中对WebAPI的伸缩

在Dashboard中,我们可以可视化地对我们的Deployment进行容器实例的伸缩,在弹出的伸缩选项对话框中输入个数,例如我们这里从2个缩减为1个,然后确定。如下图所示:

除了在Dashboard中可视化地操作进行伸缩,也可以通过kubectl来进行,例如下面这句命令,将容器实例扩展到3个。需要注意的是,由于我们的k8swebapi所在的命名空间是在aspnetcore下,因此也需要指明--namespace=aspnetcore。

 kubectl scale deployment k8swebapi --replicas= --namespace=aspnetcore

在K8S中,提供了一个autoscale接口来实现服务的自动伸缩,它会采用默认的自动伸缩策略(例如根据CPU的负载情况)来帮助我们实现弹性伸缩的功能。例如下面这句命令可以实现我们的k8s-demo可以伸缩的范围是1~3个,根据负载情况自己伸缩,在没有多少请求量压力很小时收缩为一个,在压力较大时启动另一个实例来降低负载。

kubectl autoscale deployment k8swebapi --min= --max= --namespace=aspnetcore

来一个ubuntu18 k8s集群下面的机截图

--2019-8-15

滚动更新

修改deploy.yaml文件,并执行 kubectl apply -f deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: k8swebapi
namespace: aspnetcore
labels:
name: k8swebapi
spec:
replicas:
minReadySeconds:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: %
maxUnavailable: % selector:
matchLabels:
name: k8swebapi
template:
metadata:
labels:
name: k8swebapi
spec:
imagePullSecrets:
- name: regsecret
containers:
- name: k8swebapi
image: 192.168.100.5:/admin/k8swebapi:
ports:
- containerPort:
imagePullPolicy: Always --- kind: Service
apiVersion: v1
metadata:
name: k8swebapi
namespace: aspnetcore
spec:
type: NodePort
ports:
- port:
targetPort:
selector:
name: k8swebapi

修改程序重新push

修改deploy的镜像路径  image: 192.168.100.5:80/admin/k8swebapi:20190815 ,然后执行 kubectl apply -f deploy.yaml 更新后如下,api已经发生变化

参考

K8S的滚动升级RollingUpdate​​​​​​​

k8s 滚动升级

K8s-yaml的使用及命令

ASP.NET Core on K8S深入学习(1)K8S基础知识与集群搭建

ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览

ASP.NET Core on K8S学习初探(3)部署API到K8S

ASP.NET Core on K8S深入学习(3)Deployment

Windows docker k8s asp.net core的更多相关文章

  1. Visual Studio Code和Docker开发asp.net core和mysql应用

    Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...

  2. Docker和ASP.NET Core

    Docker和ASP.NET Core Docker 正在逐渐成为容器行业的事实标准,受到 Windows 和 Linux 生态系统领域最重要供应商的支持. (Microsoft 是支持 Docker ...

  3. Windows 服务器部署 asp.net core

    踩坑日记与 Windows 服务器部署 asp.net core 指南. 准备 操作系统:Windows Server 2008 R2 或更高版本 文件: Microsoft Visual C++ 2 ...

  4. VS code docker 调试 asp.net core

    前言 .net core的诞生就是为了解决跨平台的事情的,所以.net core app运行在linux.macOS.docker上也不是什么新鲜事了. 相信已经有不少.net core的项目已经部署 ...

  5. ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...

  6. Windows平台部署 Asp.Net Core 3.1.0,将 ASP.NET Core 应用发布到 IIS ,使用 IIS 在 Windows 上托管 ASP.NET Core

    第一部分:本教程介绍如何在 IIS 服务器上托管 ASP.NET Core 应用. 官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/tutori ...

  7. Docker的asp.net core应用部署系列——docker pull 加速

    原文:Docker的asp.net core应用部署系列--docker pull 加速 版权声明:本文为博主原创文章,随意转载. https://blog.csdn.net/Michel4Liu/a ...

  8. Windows下构建ASP.NET Core+Code First+Docker

    背景介绍 本文将会示范如何在Windows系统下基于ASP.NET Core构建跨平台服务,并通过Docker容器运行发布. 首先说一下为什么选择这一套组合: 我本人和我们Code4Thought团队 ...

  9. windows下的asp.net core开发及docker下的发布

    参照下面,搭建好开发环境.Docker及配置好Docker加速器 http://www.cnblogs.com/windchen/p/6257846.html 参照下面,将windows共享目录挂载到 ...

随机推荐

  1. 《Android开发艺术探索》读书笔记之IntentFillter的匹配规则

    使用intent启动不同组件的方法 组件类型 启动方法 Activity startActivity(Intent intent) startActivityForResult(Intent inte ...

  2. JavaWeb 使用Filter实现自动登录

    思路 使用cookie存储账号.密码,使用Filter拦截,从cookie中取出账号.密码.若用户要注销|登出.不再想使用自动登录,将cookie的有效期设置为0即可. 浏览器可以查看Cookie,不 ...

  3. Spark MLlib基本算法【相关性分析、卡方检验、总结器】

    一.相关性分析 1.简介 计算两个系列数据之间的相关性是统计中的常见操作.在spark.ml中提供了很多算法用来计算两两的相关性.目前支持的相关性算法是Pearson和Spearman.Correla ...

  4. 记一次删除ocr与dbfile的恢复记录

    自己造成的一个案例: 场景:ocr磁盘组被我dd掉了,dbfile磁盘组也被我dd掉了.Rac起不来.之前ocr的DATA磁盘组被替换到了ABC磁盘.所幸的是有备份. 重新加载OCR磁盘 [root@ ...

  5. The 2019 Asia Nanchang First Round Online Programming Contest E. Magic Master

    题目链接:https://nanti.jisuanke.com/t/41352 题目意思还是好理解的,看过的人不多,感觉是被通过量吓到了.其实就是个水题,反向模拟就好了, 用队列模拟,反向模拟,它要放 ...

  6. 孪生网络(Siamese Network)在句子语义相似度计算中的应用

    1,概述 在NLP中孪生网络基本是用来计算句子间的语义相似度的.其结构如下 在计算句子语义相似度的时候,都是以句子对的形式输入到网络中,孪生网络就是定义两个网络结构分别来表征句子对中的句子,然后通过曼 ...

  7. java.util.ConcurrentModificationException异常;java.util.ConcurrentModificationException实战

    写代码遇到这个问题,很多博客文章都是在反复的强调理论,而没有对应的实例,所以这里从实例出发,后研究理论: 一.错误产生情况 1 .字符型 (1)添加 public static void main(S ...

  8. flask实战-个人博客-表单

    表单 下面我们来编写所有表单类,personalBlog中主要包含下面这些表单: 登录表单: 文章表单: 评论表单: 博客设置表单: 这里仅介绍登录表单.文章表单.分类表单和评论表单,其他的表单在实现 ...

  9. KDiff3使用指南

    http://kdiff3.sourceforge.net/ KDiff3 is a diff and merge program that compares or merges two or thr ...

  10. MAC上配置idea环境时排查问题

    现象:没有使用走公司maven仓库的setting.xml文件时,只有公司内部依赖 没有找到在idea的maven配置中指定 公司setting.xml后,所有的文件都提示找不到 解决办法:把公司se ...