Mac使用docker桌面版搭建k8s、连接私有仓库harbor

前置

使用docker桌面版搭建k8s,前置流程先下载安装好docker。

1.下载安装 Docker Desktop (Mac) Channel: edge
2.更换镜像源:Docker 镜像加速

我使用的是阿里云镜像,大家自行选择。

(一)搭建k8s

在本地使用docker搭建k8s很简单,我尝试了几种工具,下面一一说明:

1.使用docker自带的docker-desktop

在docker桌面版的k8s设置中,点击Apply & Restart可以启动k8s,然后会先去下载k8s,但是几乎一定会失败。

image.png

网上提供一种方案:


image.png

这里按照下面两篇教程操作即可:

  • 阿里云容器服务: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:

image.png

命令行查看集群状态,k8s成功运行:


image.png
2.使用kind工具

1.安装kind工具:brew install kind

2.创建集群:kind create cluster

下载创建集群

可以看到k8s上下文已经切换到kind
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
输入账号密码:

image.png

浏览器登录harbor,找个镜像pull测试一下:

docker pull docker-example.server.com/xxx
image.png
docker拉取私有镜像成功

(三)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 [email protected]  --docker-password=xxxxxx [email protected]

查看刚创建的secret:kubectl get secret

image.png

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

image.png

然后创建一个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

image.png

3.打开浏览器验证nginx是否部署成功:

http://127.0.0.1:30001


image.png

(四)其他:

有时电脑过了一个晚上后,docker显示k8s is running,但是却连接不上。


image.png

需要退出一下docker然后再启动。

参考:

https://github.com/gotok8s/k8s-docker-desktop-for-mac
https://www.jianshu.com/p/58547dcde95e

你可能感兴趣的:(Mac使用docker桌面版搭建k8s、连接私有仓库harbor)