部署harbor

Habor是由VMWare中国团队开源的容器镜像仓库。事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获 得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,水平扩展,同步,AD/LDAP集成以及 审计日志等。

手动部署

1.下载最新的docker-compose二进制文件

[root@centos-04 ansible]#  curl -L https://github.com/docker/compose/releases/download/1.22.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose

2.给执行权限

[root@centos-04 ~]#  chmod +x /usr/bin/docker-compose
[root@centos-04 ~]#

3.下载harbor离线安装包

github地址 https://github.com/goharbor/harbor/releases
# wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0-rc3.tgz
# tar zxvf harbor-offline-installer-v1.6.0-rc3.tgz

4.准备ca证书(建议大家购买一个便宜的域名,并去申请一个免费的ssl证书)

如果不想购买域名,那就自己手动生成ca证书吧,可以参考这个文档 (https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/key.md ) 免费ssl证书 https://freessl.org/  

5.安装harbor

6.创建date和crt目录

# cd harbor
编辑配置文件
# vim harbor.cfg
1)定义hostname(如 harbor.yuankeedu.com)
2)定义ui_url_protocol为https
3)定义ssl_cert/ssl_key
4)定义harbor_admin_password
安装
# sh install.sh //自动安装完成

7.访问

https://harbor.yuankeedu.com
admin 默认密码为 Harbor12345

8.创建项目

9.拉取公共镜像

docker pull tomcat
docker tag tomcat harbor.yuankeedu.com/aminglinux/tomcat:latest

10.把tomcat镜像推送到harbor

# docker login https://harbor.yuankeedu.com
输入用户名和密码
# docker push harbor.yuankeedu.com/aminglinux/tomcat:latest

扩展: 镜像复制,参考 https://blog.csdn.net/aixiaoyang168/article/details/73549898 问题: x509: certificate signed by unknown authority

1) echo -n | openssl s_client -showcerts -connect harbor.yuankeedu.com:443 2>/dev/null | sed -ne '/-BEGIN
CERTIFICATE-/,/-END CERTIFICATE-/p' >> /etc/ssl/certs/ca-bundle.trust.crt
2)systemctl restart docker

如果以上步骤无法解决该问题,尝试使用以下步骤

# mkdir -p /etc/docker/certs.d/harbor.yuankeedu.com
# vim /etc/docker/certs.d/harbor.yuankeedu.com/ca.crt //内容如下(注意,这个只针对harbor.yuankedu.com域名的,这个
其实就是免费的ca证书压缩包里的ca文件内容)
-----BEGIN CERTIFICATE-----
MIIErjCCA5agAwIBAgIQBYAmfwbylVM0jhwYWl7uLjANBgkqhkiG9w0BAQsFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0xNzEyMDgxMjI4MjZaFw0yNzEyMDgxMjI4MjZaMHIxCzAJBgNVBAYTAkNO
MSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMR0wGwYDVQQL
ExREb21haW4gVmFsaWRhdGVkIFNTTDEdMBsGA1UEAxMUVHJ1c3RBc2lhIFRMUyBS
U0EgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCgWa9X+ph+wAm8
Yh1Fk1MjKbQ5QwBOOKVaZR/OfCh+F6f93u7vZHGcUU/lvVGgUQnbzJhR1UV2epJa
e+m7cxnXIKdD0/VS9btAgwJszGFvwoqXeaCqFoP71wPmXjjUwLT70+qvX4hdyYfO
JcjeTz5QKtg8zQwxaK9x4JT9CoOmoVdVhEBAiD3DwR5fFgOHDwwGxdJWVBvktnoA
zjdTLXDdbSVC5jZ0u8oq9BiTDv7jAlsB5F8aZgvSZDOQeFrwaOTbKWSEInEhnchK
ZTD1dz6aBlk1xGEI5PZWAnVAba/ofH33ktymaTDsE6xRDnW97pDkimCRak6CEbfe
3dXw6OV5AgMBAAGjggFPMIIBSzAdBgNVHQ4EFgQUf9OZ86BHDjEAVlYijrfMnt3K
AYowHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD
AgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAG
AQH/AgEAMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au
ZGlnaWNlcnQuY29tMEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2lj
ZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwTAYDVR0gBEUwQzA3Bglg
hkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29t
L0NQUzAIBgZngQwBAgEwDQYJKoZIhvcNAQELBQADggEBAK3dVOj5dlv4MzK2i233
lDYvyJ3slFY2X2HKTYGte8nbK6i5/fsDImMYihAkp6VaNY/en8WZ5qcrQPVLuJrJ
DSXT04NnMeZOQDUoj/NHAmdfCBB/h1bZ5OGK6Sf1h5Yx/5wR4f3TUoPgGlnU7EuP
ISLNdMRiDrXntcImDAiRvkh5GJuH4YCVE6XEntqaNIgGkRwxKSgnU3Id3iuFbW9F
UQ9Qqtb1GX91AJ7i4153TikGgYCdwYkBURD8gSVe8OAco6IfZOYt/TEwii1Ivi1C
qnuUlWpsF1LdQNIdfbW3TSe0BhQa7ifbVIfvPWHYOu3rkg1ZeMo6XRU9B4n5VyJY
RmE=
# chmod 400 /etc/docker/certs.d/harbor.yuankeedu.com/ca.crt
# systemctl restart docker

kubernetes中使用harbor

以下操作在master上执行:

创建secret

# kubectl create secret docker-registry my-secret --docker-server=harbor.yuankeedu.com --dockerusername=admin
--docker-password=Harbor12345

创建完成后,可以用以下命令查看:

kubectl get secret

定义一个pod 首先,需要在harbo私有仓库里推送一个httpd的镜像,地址为harbor.yuankeedu.com/aminglinux/httpd:latest

# docker pull httpd
# docker tag httpd harbor.yuankeedu.com/aminglinux/httpd:latest
# docker login https://harbor.yuankeedu.com
# docker push

然后再定义yaml文件

# vim httpd.yaml //内容如下
apiVersion: v1
kind: Pod
metadata:
name: httpd-pod
spec:
containers:
- image: harbor.yuankeedu.com/aminglinux/httpd:latest
name: httpd-pod
imagePullSecrets:
- name: my-secret
# kubectl create -f httpd.yaml
# kubectl describe pod httpd-pod //查看pod创建过程的信息,可能会存在问题

二. 利用kubeasz项目部署(1.6.0版本的harbor并未实验成功,大家可以尝试做一下)

1)下载docker-compose二进制文件,改名后把它放到项目/etc/ansible/bin/目录下
wget https://github.com/docker/compose/releases/download/1.18.0/docker-compose-Linux-x86_64
mv docker-compose-Linux-x86_64 /etc/ansible/bin/docker-compose
2)下载habor安装文件
github地址 https://github.com/goharbor/harbor/releases
wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0-rc3.tgz
3)由于ansible解压的一些问题,需要将官方的tgz包,重新打包为zip包
tar zxf harbor-offline-installer-v1.6.0-rc3.tgz
zip -r harbor-offline-installer-v1.6.0-rc3.zip harbor
mv harbor-offline-installer-v1.6.0-rc3.zip /etc/ansible/down/harbor-offline-installer-v1.6.0.zip
4)在deploy节点编辑/etc/ansible/hosts文件
5)在deploy节点执行
vim /etc/ansible/roles/harbor/defaults/main.yml //修改版本号
ansible-playbook /etc/ansible/11.harbor.yml

kubernetes中使用NFS创建pv_pvc

kubernetes中使用NFS作为共享存储 Persistent Volume(持久化卷)简称PV, 是一个K8S资源对象,我们可以单独创建一个PV, 它不和Pod直接发生关系, 而是通过 Persistent Volume Claim, 简称PVC来实现动态绑定, 我们会在Pod定义里指定创建好的PVC, 然后PVC会根据Pod的要求去自 动绑定合适的PV给Pod使用。 持久化卷下PV和PVC概念: Persistent Volume(PV)是由管理员设置的存储,它是群集的一部分。就像节点是集群中的资源一样,PV 也是集群中的资 源。 PV 是 Volume 之类的卷插件,但具有独立于使用 PV 的 Pod 的生命周期。此 API 对象包含存储实现的细节,即 NFS、 iSCSI 或特定于云供应商的存储系统。 PersistentVolumeClaim(PVC)是用户存储的请求。它与 Pod 相似,Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以 请求特定级别的资源(CPU 和内存)。PVC声明可以请求特定的大小和访问模式(例如,可以以读/写一次或只读多次模式挂 载)。 它和普通Volume的区别是什么呢? 普通Volume和使用它的Pod之间是一种静态绑定关系,在定义Pod的文件里,同时定义了它使用的Volume。Volume是Pod 的附属品,我们无法单独创建一个Volume,因为它不是一个独立的K8S资源对象。

1.准备一台机器,搭建NFS服务

yum install nfs-utils
[root@centos-04 ~]# vim /etc/exportfs
/data/k8s/ 172.7.15.0/24(sync,rw,no_root_squash)(node节点的ip段)
systemctl start nfs
systemctl enable nfs

在node节点上测试

yum install nfs-utils
showmount -e 172.7.15.113

3 创建pv(master上)

vim mypv.yaml //内容如下
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/k8s/
server: 172.7.15.113
kubectl create -f mypv.yaml
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 10Gi RWX Retain Available 10m
状态为Available,这是因为它还没有绑定到任何的pvc上面,当定义完pvc后,就可以自动绑定了

创建pvc(master上)

vim mypvc.yaml //内容如下
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 8Gi
kubectl create -f mypvc.yaml
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
myclaim Bound pv001 10Gi RWX 2m
可以看到,pvc状态为Bound,它绑定了pv001

定义pod

vim pvpod.yaml //内容如下
apiVersion: v1
kind: Pod
metadata:
name: httpd-pvpod
spec:
containers:
- image: httpd
name: httpd-withpvc-pod
imagePullPolicy: Always
volumeMounts:
- mountPath: "/usr/local/apache2/htdocs/"
name: httpd-volume
volumes:
- name: httpd-volume
persistentVolumeClaim:
claimName: myclaim

kubectl create -f pvpod.yaml kubectl describe pod httpd-pvpod //查看Volumes那部分里的ClaimName

6 验证 1)到NFS的共享目录下创建一个文件 cd /data/k8s/ echo "Test file" > 1.html 2)进入到httpd-pod里 kubectl exec -it httpd-pvpod bash cat /usr/local/apache2/htdocs/1.html 3)删除httpd-pvpod kubectl delete pod httpd-pod cat /data/k8s/1.html 4)重建httpd-pod kubectl create -f pvpod.yaml 5)curl访问

kubectl get pod httpd-pvpod -o wide //查看其对应的IP NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE httpd-pod 1/1 Running 0 2m 172.20.3.5 172.7.15.114 curl 172.20.3.5/1.html 参考 http://www.showerlee.com/archives/2280  

在kubernetes中部署LNMP并运行Discuz上

文档整理 https://coding.net/u/aminglinux/p/k8s_discuz/git/tree/master

下载MySQL、PHP以及Nginx镜像

[root@centos-04 ~]# docker pull mysql:5.7
[root@centos-04 ~]# docker pull richarvey/nginx-php-fpm

克隆本项目

git clone https://git.coding.net/aminglinux/k8s_discuz.git

进入到项目目录

[root@centos-04 ~]# cd k8s_discuz/dz_web_dockerfile/
[root@centos-04 dz_web_dockerfile]#
docker build -t nginx-php .

将下载到的镜像push到harbor

##登录harbor,并push新的镜像
docker login harbor.yuankeedu.com //输入正确的用户名和密码
docker tag nginx-php harbor.yuankeedu.com/aminglinux/nginx-php
docker push harbor.yuankeedu.com/aminglinux/nginx-php
docker tag mysql:5.7 harbor.yuankeedu.com/aminglinux/mysql:5.7
docker push harbor.yuankeedu.com/aminglinux/mysql:5.7

搭建NFS

假设kubernetes集群网段为172.7.5.0/24,本机IP为172.7.5.13

yum install nfs-utils
vim /etc/exportfs //内容如下
/data/k8s/ 172.7.5.0/24(sync,rw,no_root_squash)
systemctl start nfs
systemctl enable nfs
mkdir -p /data/k8s/discuz/{db,web}

搭建MySQL服务

创建secret (设定mysql的root密码)

kubectl create secret generic mysql-pass --from-literal=password=DzPasswd1

创建pv(修改里面的ip为自己的)

cd ../../k8s_discuz/mysql
kubectl create -f mysql-pv.yaml

创建pvc

kubectl create -f mysql-pvc.yaml

创建deployment

kubectl create -f mysql-dp.yaml

创建service

kubectl create -f mysql-svc.yaml

在kubernetes中部署LNMP并运行Discuz中

搭建Nginx+php-fpm服务

搭建pv

cd ../../k8s_discuz/nginx_php
kubectl create -f web-pv.yaml(修改ip)

创建pvc

kubectl create -f web-pvc.yaml

创建deployment

kubectl create -f web-dp.yaml

创建service

kubectl create -f web-svc.yaml(这里面有一个80端口)

在kubernetes中部署LNMP并运行Discuz下

安装Discuz

下载dz代码 (到NFS服务器上)

cd /tmp/
git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git
cd /data/k8s/discuz/web/
mv /tmp/DiscuzX/upload/* .
chown -R 100 data uc_server/data/ uc_client/data/ config/

设置MySQL普通用户

kubectl get svc dz-mysql //查看service的cluster-ip,我的是10.68.122.120
mysql -uroot -h10.68.122.120 -pDzPasswd1 //这里的密码是在上面步骤中设置的那个密码
> create database dz;
> grant all on dz.* to 'dz'@'%' identified by 'dz-passwd-123';  

如果想用浏览器访问需要更改

浏览器访问

如果不想带30001端口需要做代理

安装nginx

编辑配置文件

绑定hosts

注意:目前nginx服务是运行在kubernetes集群里,node节点以及master节点上是可以通过cluster-ip访问到,但是外部的客户端就不能访问了。
所以,可以在任意一台node或者master上建一个nginx反向代理即可访问到集群内的nginx。
kubectl get svc dz-web //查看cluster-ip,我的ip是10.68.190.99
nginx代理配置文件内容如下:
server {
listen 80;
server_name dz.yuankeedu.com; location / {
proxy_pass http://10.68.190.99:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

安装Discuz

做完Nginx代理,就可以通过node的IP来访问discuz了。

  

  

  

  

  

kubernetes 二的更多相关文章

  1. [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  2. 傲视Kubernetes(二):Docker镜像搭建与本地Kubernetes环境搭建

    主要内容: 1.Docker与Kubernetes的关系 2.SpringBoot微服务的Docker镜像创建 3.Kubernetes本地环境搭建 一.Docker与Kubernetes的关系 在说 ...

  3. istio in kubernetes (二) -- 部署篇

    在 Kubernetes 部署 Istio [demo演示] 可参考官方文档(https://istio.io/latest/zh/docs/setup/install/) ,以部署1.7.4版本作为 ...

  4. kubernetes实践之二:Kubernetes可视WEB UI Dashboard搭建

    Kubernetes可视WEBUI Dashboard搭建 支持浏览器:火狐 一.Dashboard下载地址 git clone https://github.com/kubernetes/kuber ...

  5. Kubernetes 概念整理

    注:以下大部分内容来自网上摘录,以便后期查阅. Kubernetes (通常称为 K8s) 是用于自动部署.扩展和管理容器化(containerized)应用程序的开源系统,是 Google 内部工具 ...

  6. [原]CentOS7安装Rancher2.1并部署kubernetes (三)---解决登录kubernets超时和部署测试Pod和Containter[nginx为例]

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  7. [原]CentOS7安装Rancher2.1并部署kubernetes (一)---部署Rancher

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  8. Kubernetes系统基础

    Kubernetes系统基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.容器编排系统概述 1>.容器编排系统生态圈 Docker通过“镜像”机制极富创造性地解决了应用 ...

  9. python3 kubernetes api 使用

    一.安装 github:https://github.com/kubernetes-client/python 安装 pip install kubernetes 二.认证 1.kubeconfig文 ...

随机推荐

  1. Gh0st整理资料1

    题首 Gh0st是一款开源的远程控制软件.界面友好,性能高效.网上流传很多版本,比如红狼,饭客,败笔,大灰狼版本以及多如牛毛的个人修改的如外星人,Drat等个人修改版本.但内核都是基于Gh0st3.6 ...

  2. C++中用完需要释放掉内存的几个类

      BSTR BSTR bstrXML = NULL; //用完以后,或者 catch段中 if(bstrXML) ::SysFreeString(result); VARIANT VARIANT v ...

  3. Angular报错

    报错: Module 'App' is not available! You either misspelled the module name or forgot to load it. If re ...

  4. google/protobuf/releases/tag/v3.4.0 下载

    Protocol Buffers v3.4.0 Downloads 4.07 MB protobuf-cpp-3.4.0.tar.gz 5.02 MB protobuf-cpp-3.4.0.zip 4 ...

  5. 破解无线网络密码-BT3如何使用3

    BT3 虚拟机 SNOOPWEP2 破解无线网络WEP密钥图解 1.下载BT3 光盘映像文件(ISO格式),比如:bt3-final.iso: 用WinISO 或 UltraISO(这个还支持DVD ...

  6. Element学习

    生成 HTML 文档初始结构 HTML 文档的初始结构,就是包括 doctype.html.head.body 以及 meta 等内容.你只需要输入一个 “!” 就可以生成一个 HTML5 的标准文档 ...

  7. 图说十大数据挖掘算法(一)K最近邻算法

    如果你之前没有学习过K最近邻算法,那今天几张图,让你明白什么是K最近邻算法. 先来一张图,请分辨它是什么水果 很多同学不假思索,直接回答:“菠萝”!!! 仔细看看同学们,这是菠萝么?那再看下边这这张图 ...

  8. sqlserver 创建对某个存储过程执行情况的跟踪

    有时候需要抓取执行存储过程时某个参数的值,有时候程序调用存储过程执行后结果不太对,不确定是程序的问题还是存储过程的问题,需要单独执行存储过程看结果 即可用下面的方法 --=============== ...

  9. jgGrid获得的id值是主键的id而不是jqGrid的行号值

    {name:'cityId',index:'cityId',sorttype:'int',width:0,hidden:true,key:true}, 一定要将你的主键值的的key设置为true,这样 ...

  10. ibatis 批量更新(一)

      1.4.2.3 批量修改 支持单个动态更新.批量动态更新 <update id="updateCONSULT_SCHEDULEDynamic" parameterClas ...