成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從未有過的Kubectl指南

開發 前端
這不是一篇關于 Kubernetes 的文章。K8s 是一項極其龐大的技術,涵蓋了眾多概念,例如各種類型的 Kubernetes 對象及其交互。對于此討論,我假設你熟悉這些概念。相反,我將專門關注 kubectl、它的用法以及圍繞它構建的工具。

你是哪種工程師?光看外表,有人能猜出來嗎?很可能猜不出來。

譯自The guide to kubectl I never had.,作者 Jake Page。

如果有人通過觀察你的鍵盤就能猜出來呢?現在可能稍微容易一點了。

當鍵盤上的“k”鍵已經磨損時,你就知道自己正在與一位Kubernetes工程師打交道。

在Glasskube辦公室,你會發現到處都是備用的 “k” 鍵,以備不時之需。

當然,我是在開玩笑。

我并不確定磨損的鍵盤能說明其主人的什么情況。但我確實知道,對于任何想要成為一名熟練的Kubernetes管理員的人來說,kubectl 有多重要。

kubectl 是用于與 Kubernetes API 通信的 CLI 工具,它乍一看似乎很簡單,但很快就會變得復雜。

因此,在這篇博文中,我的目標是編寫我剛開始時希望擁有的指南。首先關注命令語法和有用的命令,然后再轉向插件和工具的充滿活力的生態系統,這些插件和工具旨在擴展 kubectl 和 Kubernetes 的功能。

同時分享一些提示和技巧,以及一份有用的 kubectl 速查表。

讓我們開始吧。

免責聲明

這不是一篇關于 Kubernetes 的文章。K8s 是一項極其龐大的技術,涵蓋了眾多概念,例如各種類型的 Kubernetes 對象及其交互。對于此討論,我假設你熟悉這些概念。相反,我將專門關注 kubectl、它的用法以及圍繞它構建的工具。

開始之前

如果你支持讓 Kubernetes 軟件包管理對每個人都更好的開源項目,那么請考慮支持Glasskube,在 GitHub 上給我們一顆星。

安裝

要安裝 kubectl,你可以根據你的操作系統選擇一些不同的選項。以下是如何在一些常見平臺上安裝它:

Linux (Ubuntu/Debian)

sudo apt-get update && sudo apt-get install -y kubectl

使用 Homebrew 的 MacOS

brew install kubectl

使用 Chocolatey 的 Windows

choco install kubernetes-cli

安裝后,你可以通過運行以下命令來驗證 kubectl 是否已正確安裝:

kubectl version --client

kubectl 命令:

kubectl 是一個命令行界面 (CLI) 工具,用于與 Kubernetes API 通信。命令有很多,多到無法記住。

圖片圖片

不過不用擔心,它不像有些人讓你想象的那么可怕。

我們將探索快速訪問命令參考、特定于 k8s 對象的命令、有用的別名和命令補全的方法。但首先,命令字符串是如何構建的?

語法

英語和漢語是主謂賓(SVO) 語言。

印地語和韓語是主賓謂(SOV) 語言。

如果 kubectl 是一種語言,那它將是一種kubectl + 動詞 + 對象/[名稱可選] + 標志 (kvof)語言

圖片圖片

也類似于語言,學習和吸收語法的最佳方法是在上下文中使用它,而不是死記硬背冗長的動詞和對象列表。

如果你遇到困難,并且想要快速引用任何 Kubernetes 版本中的現有 Kubernetes 對象,請運行 kubectl api-resources。

命令是通過選擇要應用于所需 Kubernetes 的操作 [動詞]來構建的資源 [對象],通常后跟資源的名稱,此外,你還有大量的過濾器 [標志],可以應用于命令,這些過濾器將確定最終的范圍和輸出。

圖片圖片

讓我們看一個使用常用的get 動詞來檢索 glasskube-system 命名空間中的所有資源的命令構建示例,并且輸出采用 yaml 格式:

kubectl get all --namespace glasskube-system -o yaml

如果你遇到一個你以前從未聽說過的 Kubernetes 資源,或者需要復習,請使用 kubectl explain [resource-name] 來獲取終端描述和使用說明。

命令式工作

在 Kubernetes 環境中工作時,你的任務有很多,從部署新應用、對故障資源進行故障排除、檢查使用情況等等。稍后,我們將探討如何使用聲明式工作方式更適合定義和部署工作負載,但對于其他所有內容,我們準備好了有用的命令式 Kubernetes 命令。

讓我們開始的簡單命令是:

# Create a new deployment named "nginx-deployment" with the nginx image
kubectl run nginx-deployment --image=nginx

# Delete a pod named "nginx-deployment" in the default namespace
kubectl delete pod nginx-deployment

要將命令式命令提升到下一步,請知道你可以使用TUI編輯器來修改資源:

通過運行 kubectl edit -n [namespace] [resource-name],將打開類似于以下內容的文本編輯器。編輯并像vim運行 ESC + :q! 這樣退出。

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubectl.kubernetes.io/default-container: manager
  creationTimestamp: "2024-04-22T17:07:39Z"
  generateName: glasskube-controller-manager-556ff6fccf-
  labels:
    control-plane: controller-manager
    pod-template-hash: 556ff6fccf
  name: glasskube-controller-manager-556ff6fccf-4qlxz
  namespace: glasskube-system
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: glasskube-controller-manager-556ff6fccf
    uid: 430e90e9-32f3-45f6-92dc-4bae26ae1654
"/var/folders/2q/wjmbwg1n5vn8v7vlw17nsz0h0000gn/T/kubectl-edit-1306753911.yaml" 209L, 5898B

大多數命令都適用于所有類型的 Kubernetes 對象。在進一步討論對某些 Kubernetes 資源有用的特定命令之前,了解可以應用于許多不同對象的某些有用標志是值得的。

有用標志:

— env:

--env 標志允許您為正在創建的容器指定環境變量。

kubectl run nginx-deployment --image=nginx --env="ENV_VARIABLE=value"

— template:

此標志允許您為 kubectl 命令的輸出格式指定一個 Go 模板。當您想要自定義輸出結構、過濾或表示時,它非常方便。

kubectl get pods --template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'

— field-selector:

使用此標志,您可以根據特定字段過濾資源。例如,您可以根據 Pod 的狀態或標簽過濾 Pod。

kubectl get pods --field-selector=status.phase=Running

— field-selector type=[Normal/Warning]:

這是 — field-selector 標志的一個特定用法,您可以在其中根據類型(Normal 或 Warning)過濾事件。

kubectl events -n [resource-namespace] — for=[resource-kind]/[resource-name]此命令獲取與指定命名空間中特定資源相關的事件。它會持續監視與給定資源相關的新的事件。

kubectl events -n my-namespace --for=deployment/my-deployment

老派與新派監視標志:

-o wide 與 -w:

-o wide:這是一個“老派”標志,提供寬輸出格式,顯示有關資源的其他詳細信息。

-w:這是一個“新派”標志,啟用對資源更改的持續監視,類似于 watch 命令。

使用 Pod

Pod 是 Kubernetes 生態系統中最小的抽象,它們是容納容器的邏輯單元。Pod 消耗資源,可以執行并生成日志。以下是一些可幫助您管理 Pod 的命令。

# Show resource usage of a pod
kubectl top pod -n [namespace] [pod-name]

# Run a command inside a new pod in the cluster
kubectl run -it ubuntu --image ubuntu --rm -- bash

# Show resource labels as columns
# e.g. kubectl get pods -n [namespace] -L vault-active -L vault-sealed
kubectl get pods -n [namespace] -L vault-active -L vault-sealed

# Execute a command inside a pod
kubectl exec -it [pod-name] -n [namespace] --

# Port forward to a pod
kubectl port-forward [pod-name] [local-port]:[remote-port] -n [namespace]

# Show container logs
kubectl logs -n [namespace] [pod-name]
kubectl logs -n [namespace] /deployment/[deployment-name]  # Use -f flag for continuous streaming

# Run a command inside an existing container
kubectl exec -it -n [namespace] [pod-name] -- [command...]

使用節點

節點是提供計算能力和存儲的基礎實例,Kubernetes 集群在其之上運行。

# Show node resource utilization
kubectl top node [node-name]  # Node name is optional; without shows table of all nodes

# Get node information
kubectl get node

使用 Deployments, DaemonSets 和 StatefulSets

部署、守護程序集和有狀態集是 Kubernetes 中的更高級別的抽象,用于管理應用程序工作負載的部署和擴展。

# Restart a workload (e.g. deployment, stateful set, daemon set)
kubectl rollout restart -n [namespace] [workload-kind]/[workload-name]  # Triggers a re-creation of all pods for this workload, adhering to the workload configuration

# Check the status of a deployment rollout
kubectl rollout status deployment/[name]

# View rollout history of a deployment
kubectl rollout history deployment/[name]  # View rollout history of a deployment

# Scale a deployment to the specified number of replicas
kubectl scale deployment/ --replicas=[number]  # Scale a deployment to the specified number of replicas

# Watch events related to a deployment
kubectl events -n glasskube-system --for=deployment/glasskube-controller-manager  

#Update Deployment Image
kubectl set image deployment/[deployment-name] [container-name]=new-image:tag

# Delete DaemonSet
kubectl delete daemonset [daemonset-name]

使用 Job

作業管理 pod 的執行以執行特定任務,并確保在終止之前成功完成該任務。

# Run a CronJob manually
kubectl create job [job-name] --image=image/name

# Creates a new job from the job template specified in the cronjob
kubectl create job -n [namespace] --from=cronjob/[cron-job-name] [job-name]

使用 Secret

Secret 用于在 Kubernetes 中安全地存儲敏感信息,如密碼、OAuth 令牌和 SSH 密鑰。

# Create Secret
kubectl create secret generic [secret-name] --from-literal=key1=value1 --from-file=ssh-privatekey=~/.ssh/id_rsa

# Get a value from a secret
kubectl get secrets -n [namespace] [secret-name] --template='{{ .data.[key-name] | base64decode }}'

# Get a value from a secret using jsonpath
kubectl get secrets [secret-name] -o jsnotallow="{.data.key1}" | base64 --decode

JSONPath 是一種查詢語言,用于從 JSON 文檔中提取特定數據。在 Kubernetes 中,JSONPath 表達式通常與 kubectl 命令中的-o jsonpath標志一起使用,以從這些命令的輸出中提取特定信息。

Shell 補全

您可能已注意到,kubectl 命令很快就會變得很長。可以將一個非常漂亮的 shell 補全腳本添加到您的 bash 或 zshell 文件中以啟用輕松的標簽補全。無需再死記硬背了。要在所有 shell 會話中實現這一點,請將以下內容添加到您的 ~/.zshrc 文件中:

source <(kubectl completion zsh)

并重啟shell。如果您使用 bash,請按照此處的說明進行操作:

# Install bash-completion package
sudo apt-get install -y bash-completion
# Store the output of the completion command in .bashrc
echo "source <(kubectl completion bash)" >> ~/.bashrc
# Activate the completion rules
source ~/.bashrc

圖片圖片

聲明式工作

Kubernetes 資源的聲明性管理涉及使用 YAML 清單文件指定資源的所需狀態,并將這些清單應用到集群。

創建 YAML 文件

無論 Kubernetes 對象是由您自己編寫的還是由其他人編寫的,所有對象均定義在 YAML 文件中。Kubernetes API 就是通過 YAML 文件定義來了解集群狀態的:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: glasskube-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: glasskube
      env: prod
  template:
    metadata:
      labels:
        app: glasskube
        env: prod
    spec:
      containers:
      - name: glasskube-container
        image: your-glasskube-image:latest

若要從頭開始創建此部署,請使用 kubectl create 命令:

kubectl create -f glasskube-deployment.yaml

應用 YAML 文件(客戶端應用)

運用 YAML 文件是管理 Kubernetes 資源的標準方法。您可以用 YAML 格式定義您資源的所需狀態,并將這些 YAML 文件應用于該集群。

kubectl apply -f manifest.yaml

服務器端應用 (SSA)

服務器端應用是將配置更改應用到 Kubernetes 資源的一種較新方法。使用 SSA,變更會直接應用于服務器端,這意味著 Kubernetes API 服務器負責確保實現所需狀態。

kubectl apply --server-side -f manifest.yaml

插件和工具

每當我看到一些來回討論 Kubernetes 的內容時,它到底是什么。它最適合哪些用例以及如何最好地思考它,Kelsey Hightower的同一條推文會浮現在我腦海里。

圖片圖片

這一觀點被廣泛認可,Kubernetes 插件和工具的大量生態系統證明了這一點,這些插件和工具旨在幫助處理 Kubernetes 生命周期中的各個階段。

Krew Kubernetes 插件管理器

一個強大的插件管理器,用于查找新插件是krew,安裝方法如下。通過 Krew 安裝 kubectl 插件的命令:

kubectl krew install <PLUGIN_NAME>

讓我們探索一些主要的調試和工具類別,重點介紹一些最實用的項目。由于有許多值得關注的地方,因此我將為每個部分添加一個榮譽部分。

內容和命名空間切換

在 Kubernetes 環境中,您始終在兩個層次結構上下文中操作集群和命名空間。確保準確的命令執行需要指定適當的上下文以獲得所需的輸出。切換集群上下文或命名空間可能涉及難以記住的長命令,這就是 Kubectl 和 Kubens 等工具的用武之地。

Kubectx 和 Kubens

在此輕松查看可用的集群和命名空間,并在它們之間輕松切換。

請在此處查看安裝說明。

圖片圖片

值得稱贊的:

kubectl-cf:一種在 kubeconfig 文件(而不是上下文)之間切換的更快方法。

可見性

Kubernetes 集群是復雜的系統,包含許多相互依賴的活動部分,以使您的應用得以運行。始終清晰地了解正在發生的事情至關重要。

k9s

K9s是一個方便、輕量級的交互式 Kubernetes 儀表盤,運行在終端中。除了可視化你的 k8s 資源外,你還可以輕松的進入 pods 中,編輯清單,并且在一處管理你的工作負載。這或許是我最喜歡的 Kubernetes 管理工具之一。

安裝說明在這里。

圖片圖片

kubectl tree

一個 kubectl 插件,用于通過對象上的 ownersReferences 探索 Kubernetes 對象之間的所有權關系。

圖片圖片

安裝:

kubectl krew install tree
kubectl tree --help

kubecolor

KubeColor 用于為 kubectl 輸出添加顏色。

圖片圖片

此處為安裝說明。

包管理

使用常規包管理工具進行集群包管理可能會令人抓狂,并且更新包十分繁瑣。配置很笨拙,直到現在,以聲明方式應用所需的軟件包棧仍然超出掌控范圍。

Glasskube:

有了 Glasskube,傳統包管理器(如 helm)中發現的所有痛點均可迎刃而解,確保您有時間管理工作負載,不必擔心管理您的 k8s 軟件包堆棧。

網絡

Kubectl-Cilium:

kubectl-Cilium 是一款與 Cilium 交互的插件,Cilium 是一種基于 eBPF 的云原生解決方案,用于在工作負載之間提供、保護和觀察網絡連接。

圖片圖片

安裝:

kubectl krew install cilium

Cert-manager

Cert-manager 將證書和證書頒發者添加為 Kubernetes 集群中的資源類型,簡化了獲取、更新和使用這些證書。

圖片圖片

安裝說明請見此處。

特別提及:

Ksniff:這是一個利用 tcpdump 和 Wireshark 在 Kubernetes 集群中的任何 Pod 上啟動遠程捕獲的 kubectl 插件。

RBAC

Kubelogin

Kubelogin是 Kubernetes OpenID Connect (OIDC) 認證的插件,也稱為 kubectl oidc-login。

安裝說明在這里。

Kube-policy-advisor

Kube-policy-advisor更便于從活動 K8s 環境或包含 Pod 規范(部署、守護進程集、Pod 等)的單個 .yaml 文件創建 K8s Pod Security Policies (PSP) 或 OPA Policy。

安裝:

kubectl krew install advise-policy

值得稱贊的:

  • kubectl-who-can:顯示在 Kubernetes 中 SUBJECTS 對 VERB [TYPE | TYPE/NAME | NONRESOURCEURL] 擁有 RBAC 權限。
  • rakkess:評估訪問 - kubectl 插件,用于展示服務器資源的訪問矩陣
  • kubectl-rolesum:匯總指定主題(ServiceAccount、用戶和組)的 RBAC 角色。

Linting

Kubectl-neat:

Kubectl-neat:Kubectl-neat 去除了 Kubernetes 清單中的混亂內容,讓清單更具可讀性。它主要查找兩類內容并予以忽略:由 Kubernetes 對象模型插入的默認值和常見的變異控制器。

安裝:

kubectl krew install neat

KubeLinter:

KubeLinter分析 Kubernetes YAML 文件和 Helm chart,并將它們與各種最佳實踐進行對比,重點關注生產準備和安全性。

安裝說明:https://github.com/stackrox/kube-linter?tab=readme-ov-file#installing-kubelinter。

集群維護和安全

KubePug

KubePug會下載包含針對特定 Kubernetes 版本的 API 棄用信息的已生成數據文件 data.json,掃描正在運行的 Kubernetes 集群以確定是否有任何對象會受棄用影響,并向用戶顯示受影響的對象。

示例:

您可以使用以下命令查看正在運行的集群的狀態。

$ kubepug --k8s-versinotallow=v1.22 # Will verify the current context against v1.22 version
[...]
RESULTS:
Deprecated APIs:
PodSecurityPolicy found in policy/v1beta1
     ├─ Deprecated at: 1.21
     ├─ PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.Deprecated in 1.21.
        -> OBJECT: restrictive namespace: default


Deleted APIs:
     APIs REMOVED FROM THE CURRENT VERSION AND SHOULD BE MIGRATED IMMEDIATELY!!
Ingress found in extensions/v1beta1
     ├─ Deleted at: 1.22
     ├─ Replacement: networking.k8s.io/v1/Ingress
     ├─ Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give servicesexternally-reachable urls, load balance traffic, terminate SSL, offer namebased virtual hosting etc.DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information.
        -> OBJECT: bla namespace: blabla

安裝:

kubectl krew install deprecations

Kubescape:

Kubescape是一個開源 Kubernetes 安全平臺,適用于您的集群、CI/CD 管道和 IDE,可將安全信號從掃描器噪音中分離出來。

圖片圖片

安裝說明此處。

值得一提:

kubectl-watch:另一個觀察工具,可視化查看 Kubernetes 資源的增量更改。

故障排除

Inspektor-Gadget:

Inspektor-gadget是用于調試和檢查 Kubernetes 資源和應用程序的工具(或小工具)集合。

Inspektor Gadget 工具稱為小工具。您可以部署一個、兩個或多個小工具。

圖片圖片

K8s-gpt:

k8sgpt是一個用于掃描您的 Kubernetes 集群、診斷和用簡單的英語對問題進行分類的工具。

圖片圖片

安裝說明此處。

值得一提:

kubectl node-shell:直接在正在運行的節點的主機操作系統中啟動根 shell。

日志記錄

Stern:

Stern允許您跟蹤 Kubernetes 上的多個 Pod 和 Pod 中的多個容器。每個結果都使用顏色編碼,以便更快速地進行調試。

安裝:

kubectl krew install stern

使用 kubectl 插件的一些安全影響包括可能的漏洞、權限提升和無意的數據泄露。請確保僅使用積極維護的插件,并且最好在它們周圍有一個活躍的社區。

別名

有如此多的 kubectl 命令需要記住,通過使用鍵盤快捷鍵或別名來簡化您的生活。

您將在此處找到一個存儲庫,其中包含一個腳本,用于生成數百個方便的 shell 別名 kubectl。問題是許多別名很長,可能難以回憶。不過不用擔心,我找到了Benoit Couetil 撰寫的這篇非常實用的博客文章,介紹如何處理上述腳本生成的眾多別名。

Kubectl 速查表

沒有速查表,任何指南都是不完整的,對吧?

# Basic Commands
# List API Resources
kubectl api-resources

# List Resources
kubectl get [name]

# Explain Resources
kubectl explain

# Working with Pods
# Create a new deployment named "nginx-deployment" with the nginx image
kubectl run nginx-deployment --image=nginx

# Show Resource Usage of a Pod
kubectl top pod -n [namespace] [pod-name]

# Run Command in Pod
kubectl run -it [pod-name] --image [image-name] --rm -- [command]

# Show Resource Labels
kubectl get pods -n [namespace] -L [label1] -L [label2]

# Execute Command in Pod
kubectl exec -it [pod-name] -- [command]

# Port Forwarding
kubectl port-forward [pod-name] [local-port]:[remote-port]

# Filtering Pods by Node Name
kubectl get pods --field-selector spec.nodeName=[node-name]

# Filtering Pods by Phase
kubectl get pods --field-selector status.phase=Running

# Delete a pod named "my-pod" in the default namespace
kubectl delete pod my-pod

# Working with Nodes
# Watch Nodes (Old School)
watch kubectl get nodes -o wide
# Watch Nodes (New School)
kubectl get nodes -w

# Node Resource Utilization
kubectl top node [node-name]

# Get Node Resource
kubectl describe node [node-name]

# Working with Deployments, Daemonsets, and StatefulSets
# Restart Workload
kubectl rollout restart -n [namespace] [kind]/[name]

# Rollout Status
kubectl rollout status [kind]/[name]

# Rollout History
kubectl rollout history [kind]/[name]

# Scale Deployment
kubectl scale deployment/[name] --replicas=[replica-count]

#Update Deployment Image
kubectl set image deployment/[deployment-name] [container-name]=new-image:tag

# Watch events related to a deployment
kubectl events -n glasskube-system --for=deployment/glasskube-controller-manager  

# Delete DaemonSet
kubectl delete daemonset [daemonset-name]

# Working with Jobs
# Run CronJob Manually
kubectl create job -n [namespace] --from=cronjob/[cron-job-name] [job-name]

# Working with Secrets
# Get Value from Secret
kubectl get secret -n [namespace] [secret-name] -o=jsnotallow='{.data.[key]}' | base64 --decode

# Create Secret
kubectl create secret generic [secret-name] --from-literal=key1=value1 --from-file=ssh-privatekey=~/.ssh/id_rsa

# Get a value from a secret
kubectl get secrets -n [namespace] [secret-name] --template='{{ .data.[key-name] | base64decode }}'

# Working with Containers
# Show Container Logs
kubectl logs -n [namespace] [pod-name] 
kubectl logs -n [namespace] deployment/[deployment-name]

# Run Command in Container
kubectl exec -it -n [namespace] [pod-name] -- [command]

# Working Imperatively
# Modify Resource
kubectl edit -n [namespace] [resource-kind]/[resource-name]

# Delete Resource
kubectl delete [resource-kind]/[resource-name]

# Create Resource
kubectl create -f [resource-file]

# Working Declaratively
# Use Server-Side Apply (SSA)
kubectl apply --server-side -f [resource-file]

# Events and Logs
# Show Events for Resource
kubectl get events -n [namespace] --field-selector involvedObject.kind=[kind] --field-selector involvedObject.name=[name]

# Filtering Events by Type
kubectl get events --field-selector type=Warning

# Filtering Events by Involved Object Name
kubectl get events --field-selector involvedObject.name=[resource-name]

# Show Resource Usage
kubectl top

其他資源

  • 精選插件列表:https://github.com/ishantanu/awesome-kubectl-plugins
  • 別名列表:https://github.com/ahmetb/kubectl-aliases
  • Krew 插件倉庫:https://krew.sigs.k8s.io/plugins/
責任編輯:武曉燕 來源: 云云眾生s
相關推薦

2021-02-26 07:46:09

WebDAV文件管理

2024-12-04 10:59:26

2020-10-12 08:02:04

開發人員開發編碼

2022-12-02 16:02:30

脊髓損傷者盲人Neuralink

2017-10-25 14:47:43

2013-12-11 09:41:24

大數據

2020-07-02 07:50:50

騰訊游戲老干媽

2010-06-09 10:48:51

Linux用戶

2009-03-12 08:50:33

OperaIE8Windows 7

2009-03-10 19:04:50

微軟IE8瀏覽器

2017-04-18 11:58:06

DockerRancher企業級容器

2022-07-11 14:43:29

5G通信數字化轉型

2017-05-17 10:33:50

音頻

2012-07-26 10:30:42

測試測試人員

2019-04-18 08:56:33

互聯網996裁員

2011-08-24 15:21:41

保護Android谷歌

2012-08-08 11:10:07

云計算惠普大數據

2012-09-04 15:32:47

搜狗文檔

2012-05-01 08:06:49

手機

2012-11-16 10:27:50

辛諾夫斯基Windows 8Windows Pho
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 超碰成人在线观看 | www国产亚洲精品 | 日美女逼逼 | 久久国产精品99久久久久久丝袜 | 亚洲在线免费 | 免费人成在线观看网站 | 爱高潮www亚洲精品 中文字幕免费视频 | 综合欧美亚洲 | 91极品尤物在线播放国产 | 久久久久亚洲视频 | 亚洲国产精品久久久久 | 国产一卡二卡三卡 | 久久国内 | 精品视频久久久 | 国产色99| 99视频免费播放 | www.888www看片| 成人羞羞国产免费视频 | 久久久久久国产精品三区 | 精品一区二区av | 中文字幕11页 | 国产精品夜夜春夜夜爽久久电影 | 九九免费观看视频 | 亚洲综合色站 | 国产欧美精品一区二区三区 | 精品一区二区三区91 | 噜噜噜噜狠狠狠7777视频 | 91视频一区二区三区 | 亚洲iv一区二区三区 | 精品一区二区三 | 黑人巨大精品欧美黑白配亚洲 | 在线精品国产 | 狠狠色狠狠色综合日日92 | 精品国产一区二区国模嫣然 | 日韩在线播放中文字幕 | 久久www免费人成看片高清 | 亚洲欧美视频 | 91污在线 | 欧美精品在线观看 | 日韩国产中文字幕 | 欧美v免费 |