前置
使用docker桌面版搭建k8s,前置流程先下载安装好docker。
1.下载安装 Docker Desktop (Mac) Channel: edge
2.更换镜像源:Docker 镜像加速
我使用的是阿里云镜像,大家自行选择。
(一)搭建k8s
在本地使用docker搭建k8s很简单,我尝试了几种工具,下面一一说明:
1.使用docker自带的docker-desktop
在docker桌面版的k8s设置中,点击Apply & Restart可以启动k8s,然后会先去下载k8s,但是几乎一定会失败。
网上提供一种方案:
这里按照下面两篇教程操作即可:
- 阿里云容器服务:https://github.com/AliyunContainerService/k8s-for-docker-desktop
- https://github.com/gotok8s/k8s-docker-desktop-for-mac【此项目已拉取不到k8s,作者推荐使用kind,但其readme讲述了原理】
下载好k8s后,退出docker然后重新打开,等待几分钟,k8s变成is running:
命令行查看集群状态,k8s成功运行:
2.使用kind工具
1.安装kind工具:brew install kind
2.创建集群:kind create cluster
3.使用minikube
minikube和kind差不多,按照官网教程创建即可。
(二)连接harbor
如果你已搭建好私有镜像仓库,拥有仓库账户密码。下面尝试连接它。首先私有镜像中心的证书不可信,需要添加私有镜像中心的认证证书:
1.下载附件ca.crt证书到电脑
2.运行
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
3.设置镜像源为私有仓库(例:docker-hub.example.com)并且信任:
{
"debug":true,
"experimental":true,
"insecure-registries":[
"docker-hub.example.com"
],
"registry-mirrors":[
"docker-hub.example.com"
]
}
4.重启Docker
验证是否可以登录仓库:
docker login docker-hub.example.com
输入账号密码:
浏览器登录harbor,找个镜像pull测试一下:
docker pull docker-example.server.com/xxx
(三)k8s连接harbor
使用k8s集群连接harbor,我只在docker-desktop集群成功了,使用kind或者minikube一直证书认证失败。网上说是kind或minikube要进入容器或者vm配置证书,而不是本机。暂时没有解决。
1.创建secret
kubectl create secret docker-registry SECRET_NAME –namespace=NAME_SPACE \
–docker-server=DOCKER_REGISTRY_SERVER –docker-username=DOCKER_USER \
–docker-password=DOCKER_PASSWORD –docker-email=DOCKER_EMAIL
例子:
kubectl create secret docker-registry my-secret --docker-server=https://docker-hub.example.com --docker-username=ceido@qq.com --docker-password=xxxxxx --docker-email=ceido@qq.com
查看刚创建的secret:kubectl get secret
2.验证:
创建一个文件nginx.yaml,写入
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 2
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
imagePullSecrets:
- name: my-secret
containers:
- name: my-nginx
image: docker-hub.example.com/xxx:1.14.0
ports:
- containerPort: 80
其中
imagePullSecrets:
- name: my-secret
的my-secret就是我们刚才创建的my-secret。
运行kubectl apply -f nginx.yaml
然后创建一个service:nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30001
selector:
app: my-nginx
运行kubectl apply -f nginx-svc.yaml
3.打开浏览器验证nginx是否部署成功:
http://127.0.0.1:30001
(四)其他:
有时电脑过了一个晚上后,docker显示k8s is running,但是却连接不上。
需要退出一下docker然后再启动。
参考:
https://github.com/gotok8s/k8s-docker-desktop-for-mac
https://www.jianshu.com/p/58547dcde95e