主頁 > 作業系統 > 004.OpenShift命令及故障排查

004.OpenShift命令及故障排查

2020-09-16 00:12:58 作業系統

一 CLI訪問OpenShift資源

1.1 資源操作

OCP將OpenShift集群中的為由主節點管理的物件統稱為資源,如:node、service、pod、project、deployment、user, 即使針對的是不同的資源,OpenShift命令列工具也提供了一種統一的、一致的方法來更新、修改、洗掉和查詢這些資源, oc命令列工具提供了在軟體開發專案的整個交付生命周期中修改和管理資源的常見操作,

1.2 安裝oc工具

在OpenShift安裝程序中,oc命令列工具安裝在所有master和node節點上,還可以在不屬于OpenShift集群的機器, 安裝后,可以使用用戶名和密碼對任何主節點通過身份驗證后執行相關命令, 根據使用的平臺,安裝oc命令列工具有以下幾種方式: yum安裝:在RHEL平臺上,可通過以下命令安裝oc客戶端命令, [user@host ~]$ sudo yum install atomic-openshift-clients 其它 Linux 發行版本和作業系統,需在擁有 OpenShift 訂閱后,在 Red Hat Customer Portal 中下載, 提示:oc安裝完成后自動補全需要退出一次才可生效,或者source /etc/bash_completion.d/oc,

1.3 oc主要查詢命令

[student@workstation ~]$ oc --help #顯示幫助資訊 [student@workstation ~]$ oc login -u developer -p redhat https://master.lab.example.com #登錄到OpenShift集群 提示:從client成功通過身份驗證之后,OpenShift將授權令牌保存在用戶的主檔案夾中,此令牌用于后續請求,從而無需重新輸入憑據或完整的主URL,
  1 [root@master ~]# oc whoami
  2 system:admin					#master的root用戶為集群的最高權限的用戶
  3 [student@workstation ~]$ oc whoami		        #查看當前用戶
  4 developer
  5 [student@workstation ~]$ oc new-project working	#創建project
  6 [student@workstation ~]$ oc status		        #查看專案狀態
  7 In project working on server https://master.lab.example.com:443
  8 You have no services, deployment configs, or build configs.
  9 Run 'oc new-app' to create an application.
 10 [student@workstation ~]$ oc delete project working	#洗掉project
 11 [student@workstation ~]$ oc logout		        #退出該集群,
 12 [student@workstation ~]$ oc get pods		#查看pod
 13 NAME                      READY     STATUS    RESTARTS   AGE
 14 hello-openshift-1-6ls8z   1/1       Running   0          4h
 15 [student@workstation ~]$ oc get all		        #查看所有主要組件資訊
 16 [student@workstation ~]$ oc get pods -w		#-w表示以監視模式運行

1.4 oc 其他命令

oc describe:如果oc get提供的摘要不夠,可以使用oc describe命令檢索關于資源的更詳細資訊, [student@workstation ~]$ oc describe pod hello-openshift-1-6ls8z oc export:使用oc export命令匯出資源的定義,典型的用例包括創建備份,或者用于修改定義,默認情況下,export命令以YAML格式輸出物件表示,但是可以通過提供-o選項來更改, oc create:使用oc create命令從資源定義創建資源,通常,這與用于編輯定義的oc export命令相匹配, oc delete RESOURCE_TYPE name:使用oc delete命令從OpenShift集群中洗掉資源, 注意:部分資源直接刪除后會重新創建,如基于rc的pod,需要對OpenShift體銑澩展示形式有一個基本的了解, oc exec:使用oc exec命令在容器中執行命令,可以使用此命令作為腳本的一部分運行互動式和非互動式批處理命令, oc rsh POD:oc rsh pod命令打開到容器的遠程shell會話,要遠程登錄到容器shell并執行命令,請運行以下命令, [student@workstation ~]$ oc rsh <pod> 注意:oc rsh需要pod中存在相應的shell,如bash,

二 OpenShift資源型別

2.1 常見資源

OpenShift容器平臺中的應用程式由不同型別的資源組成,主要常見的型別有:
  • Container:如何在可移植Linux環境中運行一個或多個行程的定義,容器從一個映像啟動,并且通常與同一機器上的其他容器隔離,
  • Image:一個分層的Linux檔案系統,包含應用程式代碼、依賴關系和函式庫等,image由一個名稱標識,該名稱可以是當前集群的本地名稱,也可以指向遠程Docker倉庫,
  • Pod:部署在節點上并共享唯一IP地址和卷(持久存盤)的一個或多個容器,Pods還為每個容器定義安全性和運行時策略,
  • Label:標簽是鍵值對,可以分配給系統中的任何資源進行分組和選擇,通常資源使用標簽來標識其他資源集,
  • Volume:默認情況下容器不是持久性的,即容器的內容在重新啟動時被清除,volume是掛載在pod及其容器上的檔案系統,它們可能由許多本地或網路的存盤提供,最簡單的卷型別是EmptyDir,它是一臺機器上的臨時目錄,
  • Node:node是集群中用來運行容器的節點,node通常由管理員管理,而不是由最終用戶管理,
  • Service:service是表示一組pod的邏輯名稱,service被分配一個IP地址和一個DNS名稱,可以通過埠或route向集群外部公開,名為SERVICE_HOST的環境變數會自動注入到其他pod中,
  • Route:route是一個DNS條目,創建它是為了指向一個service,以便可以從集群外部訪問它,可以配置一個或多個路由器來處理這些route,通常通過HAProxy負載均衡器,
  • Replication Controller:Replication Controller基于匹配一組label的Templates維護特定數量的pod,如果洗掉了pod,控制器將創建該pod的新副本,Replication Controller最常用來表示基于image的應用程式部分的單個部署,
  • Deployment Configuration:deployment configuration定義pod的模板,并在屬性更改時管理部署新映像或配置更改,單個deployment configuration通常類似于單個微服務,deployment configuration可以支持許多不同的部署模式,包括完全重啟、可定制的滾動更新以及生命周期前后的順序,每個deployment都表示為一個replication controller,
  • Build Configuration:build configuration包含如何將源代碼和基本image構建為新image的描述,Build可以是基于源代碼的,可以為常見語言(如Java、PHP、Ruby或Python)或基于docker的(從Dockerfile創建構建)使用構建器映像,每個build configuration都有webhook,可以通過對其基本映像的更改自動觸發,
  • Build:構建從源代碼、其他影像、Dockerfiles或二進制輸入創建新image,Build在容器中運行,具有與普通pod相同的限制,Build通常會導致將image推入Docker倉庫中,但也可以選擇運行post-build測驗而不push到image倉庫,
  • Image Streams and Image Stream Tags:IS使用標記名稱對相關is進行分組,它類似于源代碼倉庫中的分支,每個is可以有一個或多個標記(默認標記稱為“latest”),這些標記可能指向外部Docker倉庫、同一is中的其他標記,或者被控制為直接指向已知image,此外,可以通過集成的Docker倉庫直接將image push到docker倉庫,
  • Secret:secret資源可以保存文本或二進制secrets,以便注入至pod,默認情況下,在/var/run/secrets/kubernetes.io/serviceaccount上,每個容器都有一個secret,其中包含訪問API有限特權的令牌,可以創建新的secret并將它們掛載到自己的pod中,也可以參考構建中的secret(用于連接遠程服務器),或者使用它們將遠程image匯入到is中,
  • Project:所有上述資源(node除外)都存在于專案中,專案具有成員串列及其role(如view、edit或admin),以及運行的pod上的一組安全控制,并限制專案可以使用多少資源,資源名稱在專案中是惟一的,
使用oc types命令快速查看可用的概念和型別,

2.2 創建應用

簡單的應用程式、復雜的多層應用程式和微服務應用程式都可以使用資源定義檔案來描述, 這個檔案包含許多pod定義、連接這些pod的服務定義、用于水平伸縮應用程式pod的rc或dc、用于持久存盤應用程式資料的持久卷,以及OpenShift可以管理的任何其他需要的內容, oc new-app命令可以使用-o json或-o yaml選項分別創建以json或yaml格式的定義檔案的資源,可以使用oc create -f <filename>命令呼叫定義檔案,并將其用于創建應用程式,或者與其他資源定義檔案合并以創建復合應用程式, oc new-app命令可以以許多不同的方式創建在OpenShift上運行的pod應用程式,它可以使用source-to-image (S2I)流程從現有docker映像、Dockerfiles或原始源代碼創建pod, 運行oc new-app -h命令,了解在OpenShift上創建新應用程式的所有不同選項,最常見的選項如下: 運行以下命令創建應用程式,OpenShift根據Docker組態檔的ADD_REGISTRY選項定義的倉庫 pull image, $ oc new-app mysql MYSQL_USER=user MYSQL_PASSWORD=pass MYSQL_DATABASE=testdb -l db=mysql 根據私有倉庫中的image創建應用程式, $ oc new-app --docker-image=myregistry.com/mycompany/myapp --name=myapp 根據存盤在Git庫中的源代碼創建應用程式, $ oc new-app https://github.com/openshift/ruby-hello-world --name=ruby-hello 創建基于存盤在Git庫中的源代碼并參考IS的應用程式, $ oc new-app https://mygitrepo/php-hello -i php:7.0 --name=php-hello 從Docker組態檔的ADD_REGISTRY指令定義的可用倉庫之一創建一個基于mysql映像的應用程式,l db=mysql選項定義了一個值為mysql的db標簽, $ oc new-app mysql MYSQL_USER=user \ MYSQL_PASSWORD=pass \ MYSQL_DATABASE=testdb \ -l db=mysql 下圖顯示了oc new-app命令在引數為容器image時創建的Kubernetes和OpenShift資源,該命令創建dc、is和svc,可以通過埠或route從外部訪問, resources created by the oc new-app command_v1 提示:通過使用帶有源代碼的oc new-app,將創建一個build configuration,而bc又從源代碼創建一個新的應用程式,但是,如果命令中沒有使用源代碼,則不會創建gc,該命令始終為應用程式創建dc和svc,

三 oc使用練習

3.1 前置準備

準備完整的OpenShift集群,參考《003.OpenShift網路》2.1,

3.2 本練習準備

[student@workstation ~]$ lab manage-oc setup

3.3 驗證OpenShift

  1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com
  2 [student@workstation ~]$ oc project default
  3 Already on project "default" on server "https://master.lab.example.com:443".
  4 [student@workstation ~]$ oc project default
  5 Already on project "default" on server "https://master.lab.example.com:443".
  6 [student@workstation ~]$ oc get nodes
  7 NAME                     STATUS    ROLES     AGE       VERSION
  8 master.lab.example.com   Ready     master    23h       v1.9.1+a0ce1bc657
  9 node1.lab.example.com    Ready     compute   23h       v1.9.1+a0ce1bc657
 10 node2.lab.example.com    Ready     compute   23h       v1.9.1+a0ce1bc657
 11 [student@workstation ~]$ oc describe node master.lab.example.com		#查看master節點詳情
 12 [student@workstation ~]$ oc describe node node1.lab.example.com
 13 [student@workstation ~]$ oc describe node node2.lab.example.com
 14 [student@workstation ~]$ oc get pods -o wide
 15 NAME                       READY     STATUS    RESTARTS   AGE       IP              NODE
 16 docker-registry-1-8v7sh    1/1       Running   4          23h       10.129.0.30     node2.lab.example.com
 17 docker-registry-1-rrmhm    1/1       Running   2          23h       10.128.0.12     node1.lab.example.com
 18 registry-console-1-xzxxp   1/1       Running   4          23h       10.129.0.31     node2.lab.example.com
 19 router-1-fwttd             1/1       Running   4          23h       172.25.250.12   node2.lab.example.com
 20 router-1-xdw84             1/1       Running   2          23h       172.25.250.11   node1.lab.example.com
 21 [student@workstation ~]$ oc  describe pod docker-registry-1-8v7sh		#查看pod詳情

3.4 pod操作

[student@workstation ~]$ oc exec docker-registry-1-8v7sh hostname #執行pod中命令 docker-registry-1-8v7sh [student@workstation ~]$ oc exec router-1-fwttd ls / [student@workstation ~]$ oc exec docker-registry-1-8v7sh cat /etc/resolv.conf 提示:只要pod中存在的命令,都可以通過oc exec直接執行, [student@workstation ~]$ oc rsh docker-registry-1-8v7sh #進入pod的shell sh-4.2$ ls /

3.5 oc其他操作

[student@workstation ~]$ oc status -v #現實詳細的狀態 clipboard [student@workstation ~]$ oc get events #查看集群生命周期事件 [student@workstation ~]$ oc get all #獲取所有資源資訊

3.6 匯出資源

[student@workstation ~]$ oc export pod docker-registry-1-8v7sh 提示:oc export命令通常用于匯出現有資源,并將它們轉換為組態檔(YAML或JSON),以便備份或在集群的其他地方重新創建資源, [student@workstation ~]$ oc export svc,dc docker-registry --as-template=docker-registry #通過將--as-template選項傳遞給oc export命令,將多個資源作為OpenShift模板同時匯出, [student@workstation ~]$ oc export svc,dc docker-registry > docker-registry.yaml #也可以使用重定向匯出 [student@workstation ~]$ oc export --help #查看幫助

四 oc常見故障排除

4.1 常見環境資訊

使用RPM安裝的OCP,那么master和node的ocp相關服務將作為Red Hat Enterprise Linux服務運行,從master和node使用標準的sosreport實用程式,收集關于環境的資訊,以及docker和openshift相關的資訊, [root@master ~]# sosreport -k docker.all=on -k docker.logs=on sosreport命令創建一個包含所有相關資訊的壓縮歸檔檔案,并將其保存在/var/tmp目錄中, 另一個有用的診斷工具是oc adm diagnostics命令,能夠在OpenShift集群上運行多個診斷檢查,包括network、日志、內部倉庫、master節點和node節點的服務檢查等等,oc adm diagnostics --help命令,獲取幫助,

4.2 常見診斷命令

oc客戶端命令是用來檢測和排除OpenShift集群中的問題的主要工具,它有許多選項,能夠檢測、診斷和修復由集群管理的主機和節點、服務和資源的問題,若已授權所需的權限,可以直接編輯集群中大多數托管資源的配置,
  • oc get events
事件允許OpenShift記錄集群中生命周期事件的資訊,以統一的方式查看關于OpenShift組件的資訊,oc get events命令提供OpenShift namespace的事件資訊,可實作以下事件的捕獲:
    • Pod創建和洗掉
    • pod調度的節點
    • master和node節點的狀態
事件通常用于故障排除,從而獲得關于集群中的故障和問題的高級資訊,然后使用日志檔案和其他oc子命令進一步定位, 示例:使用以下命令獲得特定專案中的事件串列, [student@workstation ~]$ oc get events -n <project> 也可以通過Web控制臺進行事件的查看events,
  • oc log
oc logs命令查看build、deployment或pod的日志輸出,, 示例1:使用oc命令查看pod的日志, [student@workstation ~]$ oc logs pod 示例2:使用oc命令查看build的日志, [student@workstation ~]$ oc logs bc/build-name 使用oc logs命令和-f選項實時跟蹤日志輸出,例如,這對于連續監視build的進度和檢查錯誤非常有用, 也可以通過Web控制臺進行事件的查看log,
  • oc rsync
oc rsync命令將內容復制到正在運行的pod中的目錄或從目錄復制內容,如果一個pod有多個容器,可以使用-c選項指定容器ID,否則,它默認為pod中的第一個容器,通常用于從容器傳輸日志檔案和組態檔, 示例1:將pod目錄中的內容復制到本地目錄, [student@workstation ~]$ oc rsync <pod>:<pod_dir> <local_dir> -c <container> 示例2:將內容從本地目錄復制到pod的目錄中, [student@workstation ~]$ oc rsync <local_dir> <pod>:<pod_dir> -c <container>
  • oc port-forward
使用oc port-forward命令將一個或多個本地埠轉發到pod,這允許在本地監聽特定或隨機埠,并將資料轉發到pod中的特定埠, 示例1:本地監聽3306并轉發到pod的3306. [student@workstation ~]$ oc port-forward <pod> 3306:3306

五 TS常見故障

5.1 資源限制和配額問題

對于設定了資源限制和配額的專案,不適當的資源配置將導致部署失敗,使用oc get events和oc describe命令來排查失敗的原因, 例如試圖創建超過專案中pod數量配額限制的pod數量,那么在運行oc get events命令時會提示: Warning FailedCreate {hello-1-deploy} Error creating: pods "hello-1" is forbidden: exceeded quota: project-quota, requested: cpu=250m, used: cpu=750m, limited: cpu=900m

5.2 S2I build失敗

使用oc logs命令查看S2I構建失敗,例如,要查看名為hello的構建配置的日志: [student@workstation ~]$ oc logs bc/hello 例如可以通過在build configuration策略中指定BUILD_LOGLEVEL環境變數來調整build日志的詳細程度,
  1 {
  2 "sourceStrategy": {
  3 ...
  4 "env": [
  5 {
  6 "name": "BUILD_LOGLEVEL",
  7 "value": "5"
  8 }
  9 ]
 10 }
 11 }

5.3 ErrImagePull和imgpullback錯誤

通常是由不正確的deployment configuration造成、部署期間參考的錯誤或缺少image或Docker配置不當造成, 使用oc get events和oc describe命令排查,通過使用oc edit dc/<deploymentconfig>編輯deployment configuration來修復錯誤,

5.4 docker配置例外

master和node上不正確的docker配置可能會在部署期間導致許多錯誤, 通常檢查ADD_REGISTRY、INSECURE_REGISTRY和BLOCK_REGISTRY設定,使用systemctl status, oc logs, oc get events和oc describe命令對問題進行排查, 可以通添加/etc/sysconfig/docker組態檔中的--log-level引數來更改docker服務日志級別, 示例:將日志級別設定為debug, OPTIONS='--insecure-registry=172.30.0.0/16 --selinux-enabled --log-level=debug'

5.5 master和node節點失敗

運行systemctl status命令,對atomicopenshift-master、atom-openshift-node、etcd和docker服務中的問題進行排查,使用journalctl -u <unit-name>命令查看與前面列出的服務相關的系統日志, 可以通過在各自的組態檔中編輯--loglevel變數,然后重新啟動關聯的服務,來增加來自atom-openshift-node、atomicopenshift-master-controllers和atom-openshift-master-api服務的詳細日志記錄, 示例:設定OpenShift主控制器log level為debug級別,修改/etc/sysconfig/atomic-openshift-master-controllers檔案, OPTIONS=--loglevel=4 --listen=https://0.0.0.0:8444 延伸: Red Hat OpenShift容器平臺有五個級別的日志詳細程度,無論日志配置如何,日志中都會出現帶有致命、錯誤、警告和某些資訊嚴重程度的訊息,
  • 0:只有錯誤和警告
  • 2:正常資訊(默認)
  • 4:debug級資訊
  • 6:api級debug資訊(請求/回應)
  • 8:帶有完整請求體的API debug資訊

5.6 調度pod失敗

OpenShift master調度pod在node上運行,通常由于node本身沒有處于就緒狀態,也由于資源限制和配額,pod無法運行, 使用oc get nodes命令驗證節點的狀態,在調度失敗期間,pod將處于掛起狀態,可以使用oc get pods -o wide命令進行檢查,該命令還顯示了計劃在哪個節點上運行pod,使用oc get events和oc describe pod命令檢查調度失敗的詳細資訊, 示例1:如下所示pod調度失敗,原因是CPU不足, {default-scheduler } Warning FailedScheduling pod (FIXEDhello-phb4j) failed to fit in any node fit failure on node (hello-wx0s): Insufficient cpu fit failure on node (hello-tgfm): Insufficient cpu fit failure on node (hello-qwds): Insufficient cpu 示例2:如下所示pod調度失敗,原因是節點沒有處于就緒狀態,可通過oc describe排查, {default-scheduler } Warning FailedScheduling pod (hello-phb4j): no nodes available to schedule pods

六 常見問題排查

6.1 前置準備

準備完整的OpenShift集群,參考《003.OpenShift網路》2.1,

6.2 本練習準備

[student@workstation ~]$ lab common-troubleshoot setup

6.3 創建應用

[student@workstation ~]$ oc new-project common-troubleshoot [student@workstation ~]$ oc new-app --name=hello -i php:5.4 \ #從源代碼創建應用 > http://services.lab.example.com/php-helloworld clipboard

6.4 查看詳情

[student@workstation ~]$ oc describe is php -n openshift clipboard clipboard 結論:由上可知,倉庫中不存在所需鏡像,

6.5 修正錯誤

[student@workstation ~]$ oc new-app --name=hello -i php:7.0 http://services.lab.example.com/php-helloworld [student@workstation ~]$ oc get pod -o wide #再次查看發現一只出于pending NAME READY STATUS RESTARTS AGE IP NODE hello-1-build 0/1 Pending 0 40s <none> <none>

6.6 查看詳情

  1 [student@workstation ~]$ oc log hello-1-build		#查看log
  2 W0720 20:22:16.455008   18942 cmd.go:358] log is DEPRECATED and will be removed in a future version. Use logs instead.
  3 [student@workstation ~]$ oc get events			#查看事件
  4 LAST SEEN   FIRST SEEN   COUNT     NAME                             KIND      SUBOBJECT   TYPE      REASON             SOURCE              MESSAGE
  5 56s         4m           15        hello-1-build.15b31cbd8da8ff1e   Pod                   Warning   FailedScheduling   default-scheduler   0/3 nodes are available: 1 MatchNodeSelector, 2 NodeNotReady.
  6 [student@workstation ~]$ oc describe pod hello-1-build	#查看詳情
  7 ……
  8 Warning  FailedScheduling  31s (x22 over 5m)  default-scheduler  0/3 nodes are available: 1 MatchNodeSelector, 2 NodeNotReady.
  9 結論:由上可知,沒有node可供調度此pod,
 10 [root@master ~]# oc get nodes				#在master節點進一步排查node情況
 11 NAME                     STATUS     ROLES     AGE       VERSION
 12 master.lab.example.com   Ready      master    1d        v1.9.1+a0ce1bc657
 13 node1.lab.example.com    NotReady   compute   1d        v1.9.1+a0ce1bc657
 14 node2.lab.example.com    NotReady   compute   1d        v1.9.1+a0ce1bc657
 15 結論:由上可知,node狀態例外,都未出于ready狀態,

6.7 檢查服務

[root@node1 ~]# systemctl status atomic-openshift-node.service [root@node2 ~]# systemctl status atomic-openshift-node.service [root@node1 ~]# systemctl status docker [root@node2 ~]# systemctl status docker clipboard 結論:由上可知,node節點的docker例外,

6.8 啟動服務

[root@node1 ~]# systemctl start docker [root@node2 ~]# systemctl start docker

6.9 確認驗證

[root@master ~]# oc get nodes #再次查看node狀態 NAME STATUS ROLES AGE VERSION master.lab.example.com Ready master 1d v1.9.1+a0ce1bc657 node1.lab.example.com Ready compute 1d v1.9.1+a0ce1bc657 node2.lab.example.com Ready compute 1d v1.9.1+a0ce1bc657 [student@workstation ~]$ oc get pods #確認pod是否正常調度至node NAME READY STATUS RESTARTS AGE hello-1-build 1/1 Running 0 22m [student@workstation ~]$ oc describe is #查看is詳情 clipboard 結論:由上可知,IS也將image推送至內部倉庫,

七 oc命令綜合實驗

7.1 前置準備

準備完整的OpenShift集群,參考《003.OpenShift網路》2.1,

7.2 本練習準備

[student@workstation ~]$ lab execute-review setup

7.3 git專案至本地

[student@workstation ~]$ cd /home/student/DO280/labs/execute-review/ [student@workstation execute-review]$ git clone http://services.lab.example.com/node-hello

7.4 docker構建image

[student@workstation execute-review]$ cd node-hello/ [student@workstation node-hello]$ docker build -t node-hello:latest . [student@workstation node-hello]$ docker images #查看image REPOSITORY TAG IMAGE ID CREATED SIZE node-hello latest ff48daa00d8e 12 seconds ago 495 MB registry.lab.example.com/rhscl/nodejs-6-rhel7 latest fba56b5381b7 22 months ago 489 MB

7.5 修改docker tag

[student@workstation node-hello]$ docker tag ff48daa00d8e \ > registry.lab.example.com/node-hello:latest [student@workstation node-hello]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE node-hello latest ff48daa00d8e About a minute ago 495 MB registry.lab.example.com/node-hello latest ff48daa00d8e About a minute ago 495 MB registry.lab.example.com/rhscl/nodejs-6-rhel7 latest fba56b5381b7 22 months ago 489 MB 7.6 push image [student@workstation node-hello]$ docker push registry.lab.example.com/node-hello:latest

7.7 創建project

[student@workstation ~]$ oc login -u developer -p redhat \ > https://master.lab.example.com [student@workstation ~]$ oc projects [student@workstation ~]$ oc project execute-review [student@workstation ~]$ oc new-app registry.lab.example.com/node-hello --name hello [student@workstation ~]$ oc get all #查看全部資源 clipboard

7.8 排查ImagePullBackOff

[student@workstation ~]$ oc logs hello-1-2jkkj #查看日志 Error from server (BadRequest): container "hello" in pod "hello-1-2jkkj" is waiting to start: trying and failing to pull image [student@workstation ~]$ oc describe pod hello-1-2jkkj #查看詳情 [student@workstation ~]$ oc get events --sort-by='.metadata.creationTimestamp' #查看事件 結論:由上可知,為image pull失敗,

7.9 手動pull鏡像

[student@workstation ~]$ oc get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE hello-1-2jkkj 0/1 ImagePullBackOff 0 8m 10.128.0.45 node1.lab.example.com hello-1-deploy 1/1 Running 0 8m 10.129.0.72 node2.lab.example.com [root@node1 ~]# docker pull registry.lab.example.com/node-hello #手動拉去也失敗 Using default tag: latest Trying to pull repository registry.lab.example.com/node-hello ... All endpoints blocked. 結論:由上可知,所有endpoint都被阻塞了,這種型別的錯誤通常發生在OpenShift中,原因是不正確的部署配置或無效docker配置,

7.10 修正docker配置

[root@node1 ~]# vi /etc/sysconfig/docker 將BLOCK_REGISTRY='--block-registry registry.access.redhat.com --block-registry docker.io --block-registry registry. lab.example.com' 修改為 BLOCK_REGISTRY='--block-registry registry.access.redhat.com --block-registry docker.io' [root@node1 ~]# systemctl restart docker 提示:node2也需要如上操作,

7.11 更新pod

[student@workstation ~]$ oc rollout latest hello [student@workstation ~]$ oc get pods #確認 NAME READY STATUS RESTARTS AGE hello-1-deploy 0/1 Error 0 22m hello-2-75x9t 1/1 Running 0 47s

7.12 確認驗證

[student@workstation ~]$ oc logs hello-2-75x9t #查看log nodejs server running on http://0.0.0.0:3000

7.13 暴露服務

[student@workstation ~]$ oc expose svc hello --hostname=hello.apps.lab.example.com route "hello" exposed

7.14 測驗服務

[student@workstation ~]$ curl http://hello.apps.lab.example.com Hi! I am running on host -> hello-2-75x9t [student@workstation ~]$ lab execute-review grade #腳本驗證試驗

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/51026.html

標籤:Linux

上一篇:ffmpeg的簡單使用

下一篇:環境搭建:linux下tomcat介面測驗環境部署

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more