在上一篇文章 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. [转] QML PinchArea

    本文转自安老师的博文:Qt Quick 事件处理之捏拉缩放与旋转 绪论 本文介绍在Android 等智能手机上的一个非常重要的手势:捏拉手势. 捏拉手势最早在苹果手机上得到应用,苹果还曾经尝试为此操作 ...

  2. vue+element拖动排序功能

    项目中老大心血来潮设计了一可以拖动达到排序的功能,感觉没什么用,但是没办法,实现吧! 这功能肯定不会手撸了,直接上插件 使用Sortable.js,对vue不友好,拖拽有时候乱跳;改用vuedragg ...

  3. android studio学习----偏好设置

    主要找到设置的界面:Files->Settings , android studio里面没有preferences 1.字体大小设置 进入后你也许发现字体大小或者样式不符合你的习惯,比如我是觉得 ...

  4. centos7安装mysql注意点

    yum安装yum -y install mariadb-server 启动服务systemctl start mariadb.service 开机自动启动systemctl enable mariad ...

  5. 将积累多年的java学习资料,pdf文档给大家分享一下,比如《大话设计模式》《算法》《Linux私房菜》等等

    话不多说,资料目录如下,需要的拿走,下载的同时别忘了点下推荐. 需要的点下面链接,到小编网盘进行下载: 2-大话设计模式.pdf 链接:https://pan.baidu.com/s/1b05puNO ...

  6. csv数据的读取和写入,以及好看的可视化

    参考: https://www.jianshu.com/p/5511cb3bdbb1 https://www.baidu.com/link?url=fbslMHoMviGOyn5Ub36VGdVQBD ...

  7. mysql数据库之主从复制+双主--MMM

    mysql复制:在主数据库中,前端用户每执行一个写操作/语句,都会在二进制日志中保存一个事件,把这个事件从mysql的服务器中3306端口发送给从服务器,从服务器把这个事件接受下来,接受下来先保存在本 ...

  8. 【JavaScript】JS知识点总结

    JavaScript知识点总结: javascript简单介绍ECMAScript1.语法2.变量:只能使用var定义,如果在函数的内容使用var定义,那么它是一个局部变量,如果没有使用var它是一个 ...

  9. 常见bug类别

  10. PHP随机获取预设的值

    前面我们讲了php怎么获取随机数,<?php echo rand(1000,2000); ?> 一行代码就能搞定,如果要获取ASP,PHP,JAVASCRIPT,AJAX,CSS,JQUE ...