docker私用鏡像倉(cāng)庫(kù)Harbor部署
1. 安裝docker-compose
cd /usr/local/bin
# 下載docker-compose
wget https://zwfile.yonyougov.tech/share/crux-tools/docker-compose
# 賦予docker-compose 可執(zhí)行權(quán)限
chmod +x docker-compose
# 驗(yàn)證
docker-compose -v
# docker-compose常用命令
docker-compose up -d nginx # 構(gòu)建建啟動(dòng)nignx容器
docker-compose exec nginx bash # 登錄到nginx容器中
docker-compose down # 刪除所有nginx容器,鏡像
docker-compose ps # 顯示所有容器
docker-compose restart nginx # 重新啟動(dòng)nginx容器
docker-compose run --no-deps --rm php-fpm php -v #在php-fpm中不啟動(dòng)關(guān)聯(lián)容器,并容器執(zhí)行php -v 執(zhí)行完成后刪除容器
docker-compose build nginx #構(gòu)建鏡像 蝌焚。
docker-compose build --no-cache nginx #不帶緩存的構(gòu)建啥纸。
docker-compose logs nginx #查看nginx的日志
docker-compose logs -f nginx #查看nginx的實(shí)時(shí)日志
docker-compose config -q #驗(yàn)證(docker-compose.yml)文件配置号杏,當(dāng)配置正確時(shí),不輸出任何內(nèi)容斯棒,當(dāng)文件配置錯(cuò)誤盾致,輸出錯(cuò)誤信息。
docker-compose events --json nginx #以json的形式輸出nginx的docker日志
docker-compose pause nginx #暫停nignx容器
docker-compose unpause nginx #恢復(fù)ningx容器
docker-compose rm nginx #刪除容器(刪除前必須關(guān)閉容器)
docker-compose stop nginx #停止nignx容器
docker-compose start nginx #啟動(dòng)nignx容器
2.安裝Harbor
#1 下載離線安裝包
wget https://github.com/goharbor/harbor/releases/download/v1.10.4/harbor-offline-installer-v1.10.4.tgz
#2 解壓壓縮包
tar -zxvf harbor-offline-installer-v1.10.4.tgz
#3 修改配置文件harbor.yml
# Configuration file of Harbor
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: manager.node #修改主機(jī)名
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 8089 #修改一個(gè)不會(huì)被占用的
# https related config
# https: #暫時(shí)注掉
# https port for harbor, default is 443
# port: 443 #暫時(shí)注掉
# The path of cert and key files for nginx
# certificate: /your/certificate/path #暫時(shí)不開https注掉
# private_key: /your/private/key/path #暫時(shí)不開https注掉
# Uncomment external_url if you want to enable external proxy
# And when it enabled the hostname will no longer used
# external_url: https://reg.mydomain.com:8433
# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: Harbor12345 #修改密碼荣暮,暫用默認(rèn)
————————————————
版權(quán)聲明:本文為CSDN博主「再看我把你吃掉」的原創(chuàng)文章庭惜,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明穗酥。
原文鏈接:https://blog.csdn.net/zz_aiytag/java/article/details/105702101
#4 執(zhí)行prepare腳本
cd harbor
./prepare
#5 執(zhí)行安裝腳本
sh install.sh
#6 訪問(wèn)harbor
http://ip:port/harbor/
http://10.10.66.49:9081/harbor/sign-in admin/Harbor12345 yonyou/Yonyou@1988
#7 harbor重啟
docker-compose down
# ./prepare # 如果修改了配置執(zhí)行
docker-compose up -d
3 docker配置harbor倉(cāng)庫(kù)
# 添加http harbor倉(cāng)庫(kù)訪問(wèn)
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"],
"insecure-registries": ["10.10.66.49:9081"] #添加這一行
}
4 添加用戶并創(chuàng)建項(xiàng)目护赊,把用戶添加到項(xiàng)目并給予相應(yīng)角色
# harbor admin用戶登錄惠遏,并創(chuàng)建用戶,創(chuàng)建項(xiàng)目骏啰,并把用戶添加到項(xiàng)目中
5 上傳鏡像到harbor
#1 在docker機(jī)器登錄harbor倉(cāng)庫(kù)节吮,會(huì)生成密文保存在/root/.docker/config.json
docker login 10.10.66.49:9081
username:yonyou
password:Yonyou@1988
#2 給已有鏡像打tag
docker tag goharbor/redis-photon:v1.10.4 10.10.66.49:9081/sbfx/redis-photon:v1.10.4
#3 上傳到harbor倉(cāng)庫(kù)
docker push 10.10.66.49:9081/sbfx/redis-photon:v1.10.4
6 下載harbor倉(cāng)庫(kù)鏡像
#1 在docker機(jī)器登錄harbor倉(cāng)庫(kù),只需要執(zhí)行一次判耕,會(huì)生成密文保存在/root/.docker/config.json
docker login 10.10.66.49:9081
username:yonyou
password:Yonyou@1988
#2 拉取鏡像文件
docker pull 10.10.66.49:9081/sbfx/redis-photon:v1.10.4
7 rancher配置使用harbor倉(cāng)庫(kù)
資源 > 密文 > 鏡像庫(kù)憑證列表
地址:10.10.66.49:9081
用戶名:yonyou
密碼:Yonyou@1988
8 kubectl安裝
# 下載最新版
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
# 修改權(quán)限
chmod +x ./kubectl
# 將二進(jìn)制移到path下
sudo mv ./kubectl /usr/local/bin/kubectl
從rancher獲取kubeconfig
copy kubeconfig信息 到 ~/.kube/config (沒(méi)有就新建透绩,不然不能訪問(wèn)集群)
8.1 kubectl常用命令
# get 命令的基本輸出
kubectl get services # 列出當(dāng)前命名空間下的所有 services
kubectl get pods --all-namespaces # 列出所有命名空間下的全部的 Pods
kubectl get pods -o wide # 列出當(dāng)前命名空間下的全部 Pods,并顯示更詳細(xì)的信息
kubectl get deployment my-dep # 列出某個(gè)特定的 Deployment
kubectl get pods # 列出當(dāng)前命名空間下的全部 Pods
kubectl get pod my-pod -o yaml # 獲取一個(gè) pod 的 YAML
# describe 命令的詳細(xì)輸出
kubectl describe nodes my-node
kubectl describe pods my-pod
# 列出當(dāng)前名字空間下所有 Services壁熄,按名稱排序
kubectl get services --sort-by=.metadata.name
# 列出 Pods渺贤,按重啟次數(shù)排序
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# 列舉所有 PV 持久卷,按容量排序
kubectl get pv --sort-by=.spec.capacity.storage
# 獲取包含 app=cassandra 標(biāo)簽的所有 Pods 的 version 標(biāo)簽
kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# 獲取所有工作節(jié)點(diǎn)(使用選擇器以排除標(biāo)簽名稱為 'node-role.kubernetes.io/master' 的結(jié)果)
kubectl get node --selector='!node-role.kubernetes.io/master'
# 獲取當(dāng)前命名空間中正在運(yùn)行的 Pods
kubectl get pods --field-selector=status.phase=Running
# 獲取全部節(jié)點(diǎn)的 ExternalIP 地址
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'
# 列出屬于某個(gè)特定 RC 的 Pods 的名稱
# 在轉(zhuǎn)換對(duì)于 jsonpath 過(guò)于復(fù)雜的場(chǎng)合请毛,"jq" 命令很有用志鞍;可以在 https://stedolan.github.io/jq/ 找到它。
sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}
echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})
# 顯示所有 Pods 的標(biāo)簽(或任何其他支持標(biāo)簽的 Kubernetes 對(duì)象)
kubectl get pods --show-labels
# 檢查哪些節(jié)點(diǎn)處于就緒狀態(tài)
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
# 列出被一個(gè) Pod 使用的全部 Secret
kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
# 列舉所有 Pods 中初始化容器的容器 ID(containerID)
# Helpful when cleaning up stopped containers, while avoiding removal of initContainers.
kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3
# 列出事件(Events)方仿,按時(shí)間戳排序
kubectl get events --sort-by=.metadata.creationTimestamp
# 比較當(dāng)前的集群狀態(tài)和假定某清單被應(yīng)用之后的集群狀態(tài)
kubectl diff -f ./my-manifest.yaml
=========================================================================================
# 刪除pod和service 名稱為eurekaserver
kubectl delete pod,service eurekaserver --namespace p-pjxvk-pipeline
# 通過(guò)標(biāo)簽刪除pod
kubectl delete pod -l app=eurekaserver --namespace p-pjxvk-pipeline
# 通過(guò)標(biāo)簽刪除deployment
kubectl delete deployment -l app=eurekaserver --namespace p-pjxvk-pipeline
# 指定命名空間
kubectl get pods --namespace或-n p-pjxvk-pipeline
# 查看pod
kubectl get pod --namespace p-pjxvk-pipeline
#創(chuàng)建pod
kubectl run myeureka --image=10.10.66.49:9081/sbfx/myeureka:v1.17 --namespace=p-pjxvk-pipeline
#創(chuàng)建deployment
kubectl create deployment myeureka --image=10.10.66.49:9081/sbfx/myeureka:v1.17 --namespace=p-pjxvk-pipeline
#創(chuàng)建deployment
kubectl apply -f deployment.yml
#暴露端口
kubectl expose deploy eurekaserver --port=8791 --target-port=8791 --type=NodePort
#刪除deployment
kubectl delete deploy eurekaserver
#根據(jù)name刪除pod
kubectl delete pod myeureka --namespace p-pjxvk-pipeline
#根據(jù)name刪除deployment
kubectl delete deployment myeureka --namespace=p-pjxvk-pipeline
#根據(jù)name刪除service
kubectl delete service myeureka --namespace p-pjxvk-pipeline
# 獲取 pod 日志(標(biāo)準(zhǔn)輸出)
kubectl logs my-pod
# 獲取含 name=myLabel 標(biāo)簽的 Pods 的日志(標(biāo)準(zhǔn)輸出)
kubectl logs -l name=myLabel
# -f 跟蹤日志
kubectl logs -f my-pod
#在pod中執(zhí)行命令
kubectl exec my-pod -- ls /
#進(jìn)入pod交互
kubectl exec -it eurekaserver-5cd78d7cdb-7bks6 -- bash
# 在本地計(jì)算機(jī)上偵聽端口 5000 并轉(zhuǎn)發(fā)到 my-pod 上的端口 6000
kubectl port-forward eurekaserver-5cd78d7cdb-7bks6 8791:8791
# 顯示給定 Pod 和其中容器的監(jiān)控?cái)?shù)據(jù)
kubectl top pod eurekaserver-5cd78d7cdb-7bks6 --containers
# 縮放 為 Deployment, ReplicaSet, Replication Controller 或者 Job 設(shè)置一個(gè)新的副本數(shù)量
kubectl scale --replicas=1 deploy/eurekaserver
kubectl scale --replicas=1 rs/eurekaserver
# 查看pod詳情
kubectl describe pod/eurekaserver-5cd78d7cdb-7bks6
# 升級(jí)鏡像 滾動(dòng)升級(jí)固棚,新版本沒(méi)有啟動(dòng)成功不會(huì)停舊版本服務(wù)
kubectl set image deployment/eurekaserver eurekaserver=myeureka:v1.0
kubectl set image deployment/eurekaserver eurekaserver=10.10.66.49:9081/sbfx/myeureka:v1.0 --record=true
# 查看鏡像歷史
kubectl rollout history deploy/eurekaserver
# 回滾到上一版本
kubectl rollout undo deploy/eurekaserver
8.2與資源交互
kubectl logs my-pod # 獲取 pod 日志(標(biāo)準(zhǔn)輸出)
kubectl logs -l name=myLabel # 獲取含 name=myLabel 標(biāo)簽的 Pods 的日志(標(biāo)準(zhǔn)輸出)
kubectl logs -f my-pod # -f 跟蹤日志
kubectl logs my-pod --previous # 獲取上個(gè)容器實(shí)例的 pod 日志(標(biāo)準(zhǔn)輸出)
kubectl logs my-pod -c my-container # 獲取 Pod 容器的日志(標(biāo)準(zhǔn)輸出, 多容器場(chǎng)景)
kubectl logs -l name=myLabel -c my-container # 獲取含 name=myLabel 標(biāo)簽的 Pod 容器日志(標(biāo)準(zhǔn)輸出, 多容器場(chǎng)景)
kubectl logs my-pod -c my-container --previous # 獲取 Pod 中某容器的上個(gè)實(shí)例的日志(標(biāo)準(zhǔn)輸出, 多容器場(chǎng)景)
kubectl logs -f my-pod # 流式輸出 Pod 的日志(標(biāo)準(zhǔn)輸出)
kubectl logs -f my-pod -c my-container # 流式輸出 Pod 容器的日志(標(biāo)準(zhǔn)輸出, 多容器場(chǎng)景)
kubectl logs -f -l name=myLabel --all-containers # 流式輸出含 name=myLabel 標(biāo)簽的 Pod 的所有日志(標(biāo)準(zhǔn)輸出)
kubectl run -i --tty busybox --image=busybox -- sh # 以交互式 Shell 運(yùn)行 Pod
kubectl run nginx --image=nginx -n mynamespace # 在指定名字空間中運(yùn)行 nginx Pod
kubectl run nginx --image=nginx # 運(yùn)行 ngins Pod 并將其規(guī)約寫入到名為 pod.yaml 的文件
--dry-run=client -o yaml > pod.yaml
kubectl attach my-pod -i # 掛接到一個(gè)運(yùn)行的容器中
kubectl port-forward my-pod 5000:6000 # 在本地計(jì)算機(jī)上偵聽端口 5000 并轉(zhuǎn)發(fā)到 my-pod 上的端口 6000
kubectl exec my-pod -- ls / # 在已有的 Pod 中運(yùn)行命令(單容器場(chǎng)景)
kubectl exec my-pod -c my-container -- ls / # 在已有的 Pod 中運(yùn)行命令(多容器場(chǎng)景)
kubectl top pod POD_NAME --containers # 顯示給定 Pod 和其中容器的監(jiān)控?cái)?shù)據(jù)
Basic Commands (Beginner):
create # Create a resource from a file or from stdin.
expose # 使用 replication controller, service, deployment 或者 pod 并暴露它作為一個(gè) 新的
Kubernetes Service
run # 在集群中運(yùn)行一個(gè)指定的鏡像
set # 為 objects 設(shè)置一個(gè)指定的特征
Basic Commands (Intermediate):
explain #查看資源的文檔
get #顯示一個(gè)或更多 resources
edit #在服務(wù)器上編輯一個(gè)資源
delete #Delete resources by filenames, stdin, resources and names, or by resources and label selector
Deploy Commands:
rollout #Manage the rollout of a resource
scale #為 Deployment, ReplicaSet, Replication Controller 或者 Job 設(shè)置一個(gè)新的副本數(shù)量
autoscale #自動(dòng)調(diào)整一個(gè) Deployment, ReplicaSet, 或者 ReplicationController 的副本數(shù)量
Cluster Management Commands:
certificate #修改 certificate 資源.
cluster-info #顯示集群信息
top #Display Resource (CPU/Memory/Storage) usage.
cordon #標(biāo)記 node 為 unschedulable
uncordon #標(biāo)記 node 為 schedulable
drain #Drain node in preparation for maintenance
taint #更新一個(gè)或者多個(gè) node 上的 taints
Troubleshooting and Debugging Commands:
describe #顯示一個(gè)指定 resource 或者 group 的 resources 詳情
logs #輸出容器在 pod 中的日志
attach #Attach 到一個(gè)運(yùn)行中的 container
exec #在一個(gè) container 中執(zhí)行一個(gè)命令
port-forward #Forward one or more local ports to a pod
proxy #運(yùn)行一個(gè) proxy 到 Kubernetes API server
cp #復(fù)制 files 和 directories 到 containers 和從容器中復(fù)制 files 和 directories.
auth #Inspect authorization
Advanced Commands:
apply #通過(guò)文件名或標(biāo)準(zhǔn)輸入流(stdin)對(duì)資源進(jìn)行配置
patch #使用 strategic merge patch 更新一個(gè)資源的 field(s)
replace #通過(guò) filename 或者 stdin替換一個(gè)資源
wait #Experimental: Wait for one condition on one or many resources
convert #在不同的 API versions 轉(zhuǎn)換配置文件
Settings Commands:
label #更新在這個(gè)資源上的 labels
annotate #更新一個(gè)資源的注解
completion #Output shell completion code for the specified shell (bash or zsh)
Other Commands:
alpha #Commands for features in alpha
api-resources #Print the supported API resources on the server
api-versions #Print the supported API versions on the server, in the form of "group/version"
config #修改 kubeconfig 文件
plugin #Runs a command-line plugin
version #輸出 client 和 server 的版本信息