zoukankan      html  css  js  c++  java
  • 部署harbor以https模式和k8s对接

    集群时间同步

    我们在之前的kubeasz部署高可用kubernetes1.17.2 并实现traefik2.1.2部署篇已经实现了基于chrony的时间同步

     [root@bs-k8s-master01 ~]# cat /etc/chrony.conf
     # Use public servers from the pool.ntp.org project.
     server 20.0.0.202 iburst
     [root@bs-k8s-master01 ~]# chronyc sources -v
     210 Number of sources = 1
     ​
       .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
      / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
     | /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
     ||                                                 .- xxxx [ yyyy ] +/- zzzz
     ||      Reachability register (octal) -.           |  xxxx = adjusted offset,
     ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
     ||                                     |          |  zzzz = estimated error.
     ||                                 |    |           
     MS Name/IP address         Stratum Poll Reach LastRx Last sample               
     ===============================================================================
     ^* bs-k8s-master02               3   6   377     4    -15ms[  -17ms] +/-   21ms
     ​
     [root@bs-k8s-master01 ~]# scp /etc/chrony.conf 20.0.0.207:/etc/chrony.conf 
     root@20.0.0.207's password: 
     chrony.conf                                                                                        100% 1011   662.7KB/s   00:00    
     ​
     [root@bs-k8s-harbor01 ~]# systemctl restart chronyd.service
     [root@bs-k8s-harbor01 ~]# chronyc sources -v
     210 Number of sources = 1
     ​
       .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
      / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
     | /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
     ||                                                 .- xxxx [ yyyy ] +/- zzzz
     ||      Reachability register (octal) -.           |  xxxx = adjusted offset,
     ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
     ||                                     |          |  zzzz = estimated error.
     ||                                 |    |           
     MS Name/IP address         Stratum Poll Reach LastRx Last sample               
     ===============================================================================
     ^* 20.0.0.202                    3   6     7     1    +25us[ -546us] +/-   36ms

    注:时间同步的概念应该深入每一个搞IT人员的心中

    部署docker

     #安装服务器必备软件
     # yum -y install wget vim iftop iotop net-tools nmon telnet lsof iptraf nmap httpd-tools lrzsz mlocate ntp ntpdate strace libpcap nethogs iptraf iftop nmon bridge-utils bind-utils telnet nc nfs-utils rpcbind nfs-utils dnsmasq python python-devel  yum-utils device-mapper-persistent-data lvm2 tcpdump mlocate tree 
     #添加docker源信息
     [root@bs-k8s-harbor01 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     #列出所有docker版本,选择和Kubernetes集群一致的docker版本[不一致能否正常,我没尝试]
     [root@bs-k8s-harbor01 ~]# yum list docker-ce --showduplicates | sort -r
     [root@bs-k8s-master01 ~]# docker -v    
     Docker version 19.03.5, build 633a0ea838     #kubernetes集群版本
     #安装对应版本
     [root@bs-k8s-harbor01 ~]# yum -y install docker-ce-19.03.5-3.el7
     ​
     #为了保持集群环境一致,daemon.json也应该一致
     [root@bs-k8s-master01 docker]# cat daemon.json 
     {
       "registry-mirrors": ["https://dockerhub.azk8s.cn", "https://docker.mirrors.ustc.edu.cn"], 
       "insecure-registries": ["127.0.0.1/8"],
       "max-concurrent-downloads": 10,
       "log-driver": "json-file",
       "log-level": "warn",
       "log-opts": {
         "max-size": "10m",
         "max-file": "3"
         },
       "data-root": "/var/lib/docker"
     }
     [root@bs-k8s-harbor01 ~]# mkdir /etc/docker
     [root@bs-k8s-master01 docker]# scp daemon.json 20.0.0.207:/etc/docker/
     root@20.0.0.207's password: 
     [root@bs-k8s-harbor01 docker]# systemctl restart docker  && systemctl enable docker 
     [root@bs-k8s-harbor01 docker]# docker version
     Client: Docker Engine - Community
      Version:           19.03.5
     ......
     Server: Docker Engine - Community
      Engine:
       Version:          19.03.5

    部署harbor

    harbor的管理是基于docker-compose的

     # yum install -y docker-compose
     # docker-compose version
     docker-compose version 1.18.0, build 8dd22a9
     docker-py version: 2.6.1
     CPython version: 3.6.8
     OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017

    harbor的 git地址:https://github.com/goharbor/harbor

    这里我使用的版本是1.8

     
    [root@bs-k8s-harbor01 data]# pwd
     /data
     [root@bs-k8s-harbor01 data]# ll
     总用量 539940
     -rw-r--r-- 1 root root 552897681 5月  31 2019 harbor-offline-installer-v1.8.0.tgz
     root@bs-k8s-harbor01 data]# tar xf harbor-offline-installer-v1.8.0.tgz
     [root@bs-k8s-harbor01 data]# mv harbor /usr/local/
     [root@bs-k8s-harbor01 data]# cd /usr/local/harbor/
     [root@bs-k8s-harbor01 harbor]# ls
     harbor.v1.8.0.tar.gz  harbor.yml  install.sh  LICENSE  prepare
     ​
     #创建证书
     # mkdir /data/ca
     # openssl genrsa -out /data/ca/harbor-ca.key
     Generating RSA private key, 2048 bit long modulus
     ....................+++
     ..................................................................................+++
     e is 65537 (0x10001)
     # openssl req -x509 -new -nodes -key /data/ca/harbor-ca.key  -subj "/CN=harbor.linux.com" -days 7120 -out /data/ca/harbor-ca.crt
     ​
     #修改配置文件
     # cp harbor.yml{,.bak}
     # vim harbor.yml
     # diff harbor.yml{,.bak}
     5c5
     5c5
     < hostname: harbor.linux.com
     ---
     > hostname: reg.mydomain.com
     8c8
     < #http:
     ---
     > http:
     10c10
     < #  port: 80
     ---
     >   port: 80
     13c13
     < https:
     ---
     > # https:
     15c15
     <   port: 443
     ---
     > #   port: 443
     17,18c17,18
     <   certificate: /data/ca/harbor-ca.crt
     <   private_key: /data/ca/harbor-ca.key
     ---
     > #   certificate: /your/certificate/path
     > #   private_key: /your/private/key/path
     27c27
     < harbor_admin_password: zisefeizhu
     ---
     > harbor_admin_password: Harbor12345
     35c35
     < data_volume: /data/harbor
     ---
     > data_volume: /data
     ​
     ​
     #部署
     #  mkdir -pv /etc/docker/certs.d/harbor.linux.com/
     mkdir: 已创建目录 "/etc/docker/certs.d"
     mkdir: 已创建目录 "/etc/docker/certs.d/harbor.linux.com/"
     # cp /data/ca/harbor-ca.crt /etc/docker/certs.d/harbor.linux.com/
     # ./install.sh
     # docker-compose start
     Starting log         ... done
     Starting registry    ... done
     Starting registryctl ... done
     Starting postgresql  ... done
     Starting core        ... done
     Starting portal      ... done
     Starting redis       ... done
     Starting jobservice  ... done
     Starting proxy       ... done
     # docker ps
     CONTAINER ID        IMAGE                                               COMMAND                  CREATED             STATUS                    PORTS                                      NAMES
     287136c60b95        goharbor/nginx-photon:v1.8.0                        "nginx -g 'daemon of…"   38 seconds ago      Up 37 seconds (healthy)   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx
     66a07d42818c        goharbor/harbor-jobservice:v1.8.0                   "/harbor/start.sh"       42 seconds ago      Up 38 seconds                                                        harbor-jobservice
     e4bb415fd236        goharbor/harbor-portal:v1.8.0                       "nginx -g 'daemon of…"   42 seconds ago      Up 38 seconds (healthy)   80/tcp                                     harbor-portal
     1530c4b4c604        goharbor/harbor-core:v1.8.0                         "/harbor/start.sh"       43 seconds ago      Up 41 seconds (healthy)                                              harbor-core
     adc160874fef        goharbor/redis-photon:v1.8.0                        "docker-entrypoint.s…"   44 seconds ago      Up 42 seconds             6379/tcp                                   redis
     300165f93782        goharbor/harbor-db:v1.8.0                           "/entrypoint.sh post…"   44 seconds ago      Up 42 seconds (healthy)   5432/tcp                                   harbor-db
     a81c3d53eb2e        goharbor/registry-photon:v2.7.1-patch-2819-v1.8.0   "/entrypoint.sh /etc…"   44 seconds ago      Up 43 seconds (healthy)   5000/tcp                                   registry
     1a7cf72c6433        goharbor/harbor-registryctl:v1.8.0                  "/harbor/start.sh"       44 seconds ago      Up 42 seconds (healthy)                                              registryctl
     6be2b10b733d        goharbor/harbor-log:v1.8.0                          "/bin/sh -c /usr/loc…"   45 seconds ago      Up 44 seconds (healthy)   127.0.0.1:1514->10514/tcp                  harbor-log
     # ss -lntup
     Netid State      Recv-Q Send-Q                   Local Address:Port                                  Peer Address:Port              
     udp   UNCONN     0      0                                    *:111                                              *:*                   users:(("systemd",pid=1,fd=28))
     udp   UNCONN     0      0                                    *:123                                              *:*                   users:(("chronyd",pid=1558,fd=3))
     udp   UNCONN     0      0                            127.0.0.1:323                                              *:*                   users:(("chronyd",pid=1558,fd=1))
     udp   UNCONN     0      0                                  ::1:323                                             :::*                   users:(("chronyd",pid=1558,fd=2))
     tcp   LISTEN     0      128                                  *:22                                               *:*                   users:(("sshd",pid=956,fd=3))
     tcp   LISTEN     0      128                          127.0.0.1:1514                                             *:*                   users:(("docker-proxy",pid=6568,fd=4))
     tcp   LISTEN     0      128                                  *:111                                              *:*                   users:(("systemd",pid=1,fd=27))
     tcp   LISTEN     0      128                                 :::80                                              :::*                   users:(("docker-proxy",pid=7254,fd=4))
     tcp   LISTEN     0      128                                 :::22                                              :::*                   users:(("sshd",pid=956,fd=4))
     tcp   LISTEN     0      128                                 :::443                                             :::*                   users:(("docker-proxy",pid=7243,fd=4))

     # docker login harbor.linux.com
     ​
     Username: admin
     Password: 
     WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
     Configure a credential helper to remove this warning. See
     https://docs.docker.com/engine/reference/commandline/login/#credentials-store
     ​
     Login Succeeded

    配置开机自启

    # cat /etc/rc.d/rc.local 

    cd /usr/local/harbor && docker-compose start

    注:登陆失败的原因可能有:1. hosts没有域名解析 2.密码错误

    客户端配置

    以bs-k8s-master01为例

     # mkdir -pv /etc/docker/certs.d/harbor.linux.com/  &&  scp 20.0.0.207:/data/ca/harbor-ca.crt /etc/docker/certs.d/harbor.linux.com/ && docker login harbor.linux.com
     mkdir: 已创建目录 "/etc/docker/certs.d"
     mkdir: 已创建目录 "/etc/docker/certs.d/harbor.linux.com/"
     The authenticity of host '20.0.0.207 (20.0.0.207)' can't be established.
     ECDSA key fingerprint is SHA256:EqqNfQ6sVyEO5yRX8E2plLlEaaeTyLbXhocH4uxhvJw.
     ECDSA key fingerprint is MD5:a2:3a:03:bc:e7:7a:f8:c3:ef:db:6c:d5:d2:34:e1:3c.
     Are you sure you want to continue connecting (yes/no)? yes
     Warning: Permanently added '20.0.0.207' (ECDSA) to the list of known hosts.
     root@20.0.0.207's password: 
     harbor-ca.crt                                                                                      100% 1115   512.7KB/s   00:00    
     Username: admin
     Password: 
     WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
     Configure a credential helper to remove this warning. See
     https://docs.docker.com/engine/reference/commandline/login/#credentials-store
     ​
     Login Succeededxxxxxxxxxx31 1# mkdir -pv /etc/docker/certs.d/harbor.linux.com/  &&  scp 20.0.0.207:/data/ca/harbor-ca.crt /etc/docker/certs.d/harbor.linux.com/ && docker login harbor.linux.com2mkdir: 已创建目录 "/etc/docker/certs.d"3mkdir: 已创建目录 "/etc/docker/certs.d/harbor.linux.com/"4The authenticity of host '20.0.0.207 (20.0.0.207)' can't be established.5ECDSA key fingerprint is SHA256:EqqNfQ6sVyEO5yRX8E2plLlEaaeTyLbXhocH4uxhvJw.6ECDSA key fingerprint is MD5:a2:3a:03:bc:e7:7a:f8:c3:ef:db:6c:d5:d2:34:e1:3c.7Are you sure you want to continue connecting (yes/no)? yes8Warning: Permanently added '20.0.0.207' (ECDSA) to the list of known hosts.9root@20.0.0.207's password: 10harbor-ca.crt                                                                                      100% 1115   512.7KB/s   00:00    11Username: admin12Password: 13WARNING! Your password will be stored unencrypted in /root/.docker/config.json.14Configure a credential helper to remove this warning. See15https://docs.docker.com/engine/reference/commandline/login/#credentials-store1617Login Succeeded18# mkdir -pv /etc/docker/certs.d/harbor.linux.com/19mkdir: 已创建目录 "/etc/docker/certs.d"20mkdir: 已创建目录 "/etc/docker/certs.d/harbor.linux.com/"21# scp 20.0.0.207:/data/ca/harbor-ca.crt /etc/docker/certs.d/harbor.linux.com/22root@20.0.0.207's password: 23harbor-ca.crt                                                                                      100% 1115   690.7KB/s   00:00    24# docker login harbor.linux.com25Username: admin26Password: 27WARNING! Your password will be stored unencrypted in /root/.docker/config.json.28Configure a credential helper to remove this warning. See29https://docs.docker.com/engine/reference/commandline/login/#credentials-store3031Login Succeededshell
    

      # cat /etc/docker/daemon.json
      {
        "registry-mirrors": ["https://dockerhub.azk8s.cn", "https://docker.mirrors.ustc.edu.cn"],
        "insecure-registries": ["harbor.linux.com", "20.0.0.207:443"],
        "max-concurrent-downloads": 10,
        "log-driver": "json-file",
        "log-level": "warn",
        "log-opts": {
        "max-size": "10m",
        "max-file": "3"
        },
        "data-root": "/var/lib/docker"
      }


    # systemctl restart docker
    # docker login harbor.linux.com
    # docker login 20.0.0.207:443 # cat
    /root/.docker/config.json { "auths": {

        "auths": {
        "20.0.0.207:443": {
        "auth": "YWRtaW46emlzZWZlaXpodQ=="
        },

    "harbor.linux.com": {
           "auth": "YWRtaW46emlzZWZlaXpodQ=="
         }
       },
       "HttpHeaders": {
         "User-Agent": "Docker-Client/19.03.5 (linux)"
       }
     }

    注:其他集群机同样操作

    测试

    以ceph rbd 为例

     #kubernetes master节点拉取镜像上传到harbor仓库,worker节点拉取镜像
     [root@bs-k8s-master01 k8s]# docker pull quay.io/external_storage/rbd-provisioner:latest
     ​
     [root@bs-k8s-master01 k8s]# docker pull quay.io/external_storage/rbd-provisioner:latest
     [root@bs-k8s-master01 k8s]# docker tag quay.io/external_storage/rbd-provisioner:latest harbor.linux.com/rbd/rbd-provisioner:latest
     [root@bs-k8s-master01 k8s]# docker push harbor.linux.com/rbd/rbd-provisioner:latest
     ​
     [root@bs-k8s-node01 ~]# docker pull harbor.linux.com/rbd/rbd-provisioner:latest

    对接kubernetes

     
    #用户名密码存放
     # cat ~/.docker/config.json |base64 -w 0
     ewoJImF1dGhzIjogewoJCSJoYXJib3IubGludXguY29tIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NmVtbHpaV1psYVhwb2RRPT0iCgkJfQoJfSwKCSJIdHRwSGVhZGVycyI6IHsKCQkiVXNlci1BZ2VudCI6ICJEb2NrZXItQ2xpZW50LzE5LjAzLjUgKGxpbnV4KSIKCX0KfQ==
     ​
     #创建secret
     # cat secret-harbor.yaml
     ##########################################################################
     #Author:                     zisefeizhu
     #QQ:                         2********0
     #Date:                       2020-03-17
     #FileName:                   secret-harbor.yaml
     #URL:                        https://www.cnblogs.com/zisefeizhu/
     #Description:                The test script
     #Copyright (C):              2020 All rights reserved
     ###########################################################################
     apiVersion: v1
     kind: Secret
     metadata:
       name: k8s-harbor-login
     type: kubernetes.io/dockerconfigjson
     data:
       .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJoYXJib3IubGludXguY29tIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NmVtbHpaV1psYVhwb2RRPT0iCgkJfQoJfSwKCSJIdHRwSGVhZGVycyI6IHsKCQkiVXNlci1BZ2VudCI6ICJEb2NrZXItQ2xpZW50LzE5LjAzLjUgKGxpbnV4KSIKCX0KfQ==
     # pwd
     /data/k8s/harbor
     ​
     # kubectl apply -f secret-harbor.yaml
     secret/k8s-harbor-login created
     ​
     #部署rbd  pod测试
     [root@bs-k8s-master01 harbor]# cat external-storage-rbd-provisioner.yaml
     ##########################################################################
     #Author:                     zisefeizhu
     #QQ:                         2********0
     #Date:                       2020-03-13
     #FileName:                   external-storage-rbd-provisioner.yaml
     #URL:                        https://www.cnblogs.com/zisefeizhu/
     #Description:                The test script
     #Copyright (C):              2020 All rights reserved
     ###########################################################################
     apiVersion: v1
     kind: ServiceAccount
     metadata:
       name: rbd-provisioner
       namespace: default
     ---
     kind: ClusterRole
     apiVersion: rbac.authorization.k8s.io/v1
     metadata:
       name: rbd-provisioner
     rules:
       - apiGroups: [""]
         resources: ["persistentvolumes"]
         verbs: ["get", "list", "watch", "create", "delete"]
       - apiGroups: [""]
         resources: ["persistentvolumeclaims"]
         verbs: ["get", "list", "watch", "update"]
       - apiGroups: ["storage.k8s.io"]
         resources: ["storageclasses"]
         verbs: ["get", "list", "watch"]
       - apiGroups: [""]
         resources: ["events"]
         verbs: ["create", "update", "patch"]
       - apiGroups: [""]
         resources: ["endpoints"]
         verbs: ["get", "list", "watch", "create", "update", "patch"]
       - apiGroups: [""]
         resources: ["services"]
         resourceNames: ["kube-dns"]
         verbs: ["list", "get"]
     ---
     kind: ClusterRoleBinding
     apiVersion: rbac.authorization.k8s.io/v1
     metadata:
       name: rbd-provisioner
     subjects:
       - kind: ServiceAccount
         name: rbd-provisioner
         namespace: default
     roleRef:
       kind: ClusterRole
       name: rbd-provisioner
       apiGroup: rbac.authorization.k8s.io
     ​
     ---
     apiVersion: rbac.authorization.k8s.io/v1
     kind: Role
     metadata:
       name: rbd-provisioner
       namespace: default
     rules:
     - apiGroups: [""]
       resources: ["secrets"]
       verbs: ["get"]
     ---
     apiVersion: rbac.authorization.k8s.io/v1
     kind: RoleBinding
     metadata:
       name: rbd-provisioner
       namespace: default
     roleRef:
       apiGroup: rbac.authorization.k8s.io
       kind: Role
       name: rbd-provisioner
     subjects:
     - kind: ServiceAccount
       name: rbd-provisioner
       namespace: default---
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: rbd-provisioner
       namespace: default
     spec:
       replicas: 1
       selector:
         matchLabels:
           app: rbd-provisioner
       strategy:
         type: Recreate
       template:
         metadata:
           labels:
             app: rbd-provisioner
         spec:
           containers:
           - name: rbd-provisioner
             image: "harbor.linux.com/rbd/rbd-provisioner:latest"
             imagePullPolicy: IfNotPresent
             env:
             - name: PROVISIONER_NAME
               value: ceph.com/rbd
           imagePullSecrets: 
             - name: k8s-harbor-login
           serviceAccount: rbd-provisioner
           nodeSelector:             ## 设置node筛选器,在特定label的节点上启动
             rbd: "true"
      #节点打标签       
     [root@bs-k8s-master01 harbor]# kubectl label nodes 20.0.0.204 rbd=true
     node/20.0.0.204 labeled
     #删除bs-k8s-node01节点上的rbd镜像
     ​
     [root@bs-k8s-master01 harbor]# kubectl apply -f external-storage-rbd-provisioner.yaml 
     serviceaccount/rbd-provisioner created
     clusterrole.rbac.authorization.k8s.io/rbd-provisioner created
     clusterrolebinding.rbac.authorization.k8s.io/rbd-provisioner created
     role.rbac.authorization.k8s.io/rbd-provisioner created
     rolebinding.rbac.authorization.k8s.io/rbd-provisioner created
     deployment.apps/rbd-provisioner created
     [root@bs-k8s-master01 harbor]# kubectl get pods -o wide -w
     NAME                              READY   STATUS              RESTARTS   AGE   IP       NODE         NOMINATED NODE   READINESS GATES
     rbd-provisioner-9cf46c856-bl454   0/1     ContainerCreating   0          6s    <none>   20.0.0.204   <none>           <none>
     rbd-provisioner-9cf46c856-bl454   1/1     Running             0          37s   172.20.46.82   20.0.0.204   <none>           <none>

    测试完成

  • 相关阅读:
    leetcode——36.有效的数独
    leetcode——60.第K个排列
    leetcode——128. 最长连续序列
    leetcode——81. 搜索旋转排序数组 II
    leetcode——49.字母异构词分组
    leetcode——75.颜色分类
    leetcode——44.通配符匹配
    leetcode——88.合并两个有序数组
    leetcode——116.填充每一个节点的下一个右侧节点指针
    树莓派系统终端中让文件和文件夹显示不同颜色的设置
  • 原文地址:https://www.cnblogs.com/zisefeizhu/p/12329864.html
Copyright © 2011-2022 走看看