前面的系列教程都是在阿里云上实践的,最近自己组装了一台台式电脑,装上了win10系统。为了让更多的小伙伴有机会学习k8s的编排,这里使用了另一个更为简单的方案——Docker for Windows。当然,使用mac的同学也可以使用Docker for Mac。其安装使用方式都大同小异。这里重点讲一下在win10上的安装。
准备工作
系统配置
开始虚拟化
先查看CPU是否支持虚拟化和是否已启用虚拟化。
如果未启用,需要进入到BIOS进行设置,这里略。
启用Hyper-V
安装Docker for Windows需要使用虚拟化,可以使用Hyper-V,也可以使用Oracle Virtual Box,如果安装的系统不符合运行Docker for Windows的要求,则可以安装Docker Toolbox。这里不做介绍。
设置->应用->程序和功能->启用和关闭Windows功能
启用Hyper-V
后续k8s教程需要,NFS客户端也启用了吧。Telnet客户端也是常用工具,也顺道启用了。
启用好后,重启电脑。
下载地址
[Docker for Windows](https://download.docker.com/win/stable/Docker Desktop Installer.exe)
官网
安装Docker
双击上面下载的Docker for Windows Installer.exe
安装成功,桌面会出现图标
右下脚可查看
可以修改镜像加速,这里使用阿里云的。
这里只要Docker running为绿色即可,Kubernetes先别管。冒然安装,会安装失败。
验证安装的docker
- 打开终端查看版本:
docker version
- 下载nginx镜像
docker pull nginx
- 运行nginx镜像
docker run -p 81:80 -d --name mynginx nginx
为了方便使用linux的命令,这里使用了git bash
-
浏览器访问
http://localhost:81
-
清理刚运行的nginx实例
# 停止刚运行的名称为mynginx的实例
docker ps -a | grep mynginx | awk '{print $1}' | xargs docker stop
# 删除刚运行的名称为mynginx的实例
docker ps -a | grep mynginx | awk '{print $1}' | xargs docker rm
安装Kubernetes
准备安装镜像
如果不提前准备好镜像的话,在启用Kubernetes的时候,页面会卡死,原因就是镜像默认会从Kubernetes提供的官方地址下载,该地址在国内是被墙的,所以我们需要将相关镜像先下载到本地。
![
](qiniu.mldong.com/mldong-arti…)
- 克隆脚本
git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop.git
-
进入目录
cd k8s-for-docker-desktop
- 检出对应版本分支
```shell
git checkbot v1.16.5
- 以管理员身份运行PowerShell
- 重新进入k8s-for-docker-desktop目录
- 设置执行脚本权限
Set-ExecutionPolicy RemoteSigned
- 执行下载镜像脚本
脚本的逻辑其实就是
- 从阿里云镜像仓库下载镜像
- 修改镜像tag为官方地址
- 删除阿里镜像
./load_images.ps1
- 关闭执行脚本权限
Set-ExecutionPolicy Restricted
启用Kubernetes集群
安装好镜像后,就可以启用Kubernetes集群了。该过程会有一丢丢久,正常启动后,Kubernetes则会显绿色。
下载Kubectl客户端
下载地址:www.kubernetes.org.cn/installkube…
配置环境变量,略。
验证Kubernetes集群
- 切换当前集群
kubectl config use-context docker-desktop
- 验证Kubernetes集群状态
kubectl cluster-info
kubectl get nodes
安装ingress-nginx
看过前面系列文章的同学可能知道,Kubernetes总共三种暴露服务的方式。
- LoadBlancer Service
- NodePort Service
- Ingress
这里不做过多的介绍了,有想了解的同学可以去查资料。我们使用云平台的时候,云平台已经帮安装好ingress-nginx了,我们只需要定义yaml文件使用即可,这里我们需要自己安装。
ingress-nginx负载均衡调用顺序:用户--->ingress-nginx(pod)--->ingress-nginx(控制器)--->ingress--->service--->pod
不同版本的Kubernetes,使用的ingress-nginx版本是不一样的,我们可以看一下我们现在对应的版本是啥。
可以看看k8s-for-docker-desktop/images.properties文件
github地址:github.com/kubernetes/…
是啥版本,就去看对应的文件。
- 依次下载yaml文件
- 开始安装
kubectl apply -f mandatory.yaml
kubectl apply -f cloud-generic.yaml
- 查看
kubectl get pods -n ingress-nginx
- 浏览器访问
http://localhost
完整地发布一个nginx服务
创建命名空间
- nginx-ns.yaml
cat << EOF > nginx-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: mldong-study
EOF
- 执行发布命令
kubectl apply -f nginx-ns.yaml
- 查看执行结果
kubectl get ns
创建ConfigMap-配置文件
- nginx-cm.yaml
cat << EOF > nginx-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-cm
namespace: mldong-study
data:
a.conf: |-
server {
listen 80;
server_name a.study.com;
location / {
root /usr/share/nginx/html;
index a.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
b.conf: |-
server {
listen 80;
server_name b.study.com;
location / {
root /usr/share/nginx/html;
index b.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
- 执行发布命令
kubectl apply -f nginx-cm.yaml
- 查看执行结果
kubectl get cm -n mldong-study
创建ConfigMap-html文件
win上使用hostpath不是很方便,后续会使用nfs。这里先以最简单的方式演示。
- nginx-cm-html.yaml
cat << EOF > nginx-cm-html.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-cm-html
namespace: mldong-study
data:
a.html: |-
aaaaaa
b.html: |-
bbbbbb
EOF
- 执行发布命令
kubectl apply -f nginx-cm-html.yaml
- 查看执行结果
kubectl get cm -n mldong-study
创建Deployment
- nginx-deployment.yaml
cat << EOF > nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: mldong-study
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
annotations:
version/config: V0001
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: port
protocol: TCP
volumeMounts:
- name: nginx-cm-html
mountPath: "/usr/share/nginx/html"
- name: nginx-cm
mountPath: "/etc/nginx/conf.d"ls
volumes:
- name: nginx-cm-html
configMap:
name: nginx-cm-html
- name: nginx-cm
configMap:
name: nginx-cm
EOF
- 执行发布命令
kubectl apply -f nginx-deployment.yaml
- 查看执行结果
kubectl get pods -n mldong-study
创建Service
- nginx-service.yaml
cat << EOF > nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport
namespace: mldong-study
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
#nodePort: 32180 # 这里不指定就会随机(30000-32767)
selector:
app: nginx
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: mldong-study
spec:
type: ClusterIP
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
EOF
- 执行发布命令
kubectl apply -f nginx-service.yaml
- 查看执行结果
kubectl get service -n mldong-study
创建Ingress
- nginx-ingress.yaml
cat << EOF > nginx-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
name: mynginx-ingress
namespace: mldong-study
spec:
rules:
- host: a.study.com
http:
paths:
- backend:
serviceName: nginx
servicePort: 80
path: /
- host: b.study.com
http:
paths:
- backend:
serviceName: nginx
servicePort: 80
path: /
EOF
- 执行发布命令
kubectl apply -f nginx-ingress.yaml
- 查看执行结果
kubectl get ingress -n mldong-study
修改hosts
浏览器访问
最后清理现场
kubectl delete -f nginx-ns.yaml
如需要再次执行,依次执行如下命令:
kubectl apply -f nginx-ns.yaml
kubectl apply -f nginx-cm.yaml
kubectl apply -f nginx-cm-html.yaml
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml
kubectl apply -f nginx-ingress.yaml
小结
本文在Win10系统上安装Docker for Windows,并启用了其Kubernetes集群-单节点版,完整的发布了一个nginx的服务。可以这么说,安装好Docker for Windows并成功启用其Kubernetes后,你就可以正式入门学习k8s编排了。当然,在该环境下,不只是可以学习k8s编排,像docker/docker-compose也是自带的,也可以安排上。
原文链接:https://juejin.im/post/6856407118669742094