kubernetes 二

 部署harbor

Habor是由VMWare中國團隊開源的容器鏡像倉庫。事實上,Habor是在Docker Registry上進行了相應的企業級擴展,從而獲 得了更加普遍的應用,這些新的企業級特性包括:管理用戶界面,基於角色的訪問控制 ,水平擴展,同步,AD/LDAP集成以及 審計日誌等。php

手動部署html

1.下載最新的docker-compose二進制文件node

[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.給執行權限mysql

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

3.下載harbor離線安裝包linux

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證書)nginx

若是不想購買域名,那就本身手動生成ca證書吧,能夠參考這個文檔 (https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/key.md ) 免費ssl證書 https://freessl.org/  git

5.安裝harborgithub

6.建立date和crt目錄web

# 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.訪問sql

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了。
相關文章
相關標籤/搜索