Kubernetes
  • 序言
  • 基礎入門
    • Kubernetes 簡介
    • Kubernetes 基本概念
    • Kubernetes 101
    • Kubernetes 201
    • Kubernetes 集群
  • 核心原理
    • 核心原理
    • 架構原理
    • 設計理念
    • 核心組件
      • etcd
      • kube-apiserver
      • kube-scheduler
      • kube-controller-manager
      • kubelet
      • kube-proxy
      • kube-dns
      • Federation
      • kubeadm
      • hyperkube
      • kubectl
    • 資源對象
      • Autoscaling
      • ConfigMap
      • CronJob
      • CustomResourceDefinition
      • DaemonSet
      • Deployment
      • Ingress
      • Job
      • LocalVolume
      • Namespace
      • NetworkPolicy
      • Node
      • PersistentVolume
      • Pod
      • PodPreset
      • ReplicaSet
      • Resource Quota
      • Secret
      • SecurityContext
      • Service
      • ServiceAccount
      • StatefulSet
      • Volume
  • 部署配置
    • 部署指南
    • kubectl 安裝
    • 單機部署
    • 特性開關
    • 最佳配置
    • 版本支持
    • 集群部署
      • kubeadm
      • kops
      • Kubespray
      • Azure
      • Windows
      • LinuxKit
      • kubeasz
    • 附加組件
      • Addon-manager
      • DNS
      • Dashboard
      • 監控
      • 日誌
      • Metrics
      • GPU
      • Cluster Autoscaler
      • ip-masq-agent
    • Kubernetes-The-Hard-Way
      • 準備部署環境
      • 安裝必要工具
      • 創建計算資源
      • 配置創建證書
      • 配置生成配置
      • 配置生成密鑰
      • 部署 Etcd 群集
      • 部署控制節點
      • 部署計算節點
      • 配置 Kubectl
      • 配置網絡路由
      • 部署 DNS 擴展
      • 煙霧測試
      • 刪除集群
  • 插件擴展
    • API 擴展
      • Aggregation
      • CustomResourceDefinition
    • 訪問控制
      • 認證
      • RBAC 授權
      • 准入控制
    • Scheduler 擴展
    • 網絡插件
      • CNI
      • Flannel
      • Calico
      • Weave
      • Cilium
      • OVN
      • Contiv
      • SR-IOV
      • Romana
      • OpenContrail
      • Kuryr
    • 運行時插件 CRI
      • CRI-tools
      • Frakti
    • 存儲插件
      • 容器存儲接口 CSI
      • FlexVolume
      • glusterfs
    • 網絡策略
    • Ingress Controller
      • Ingress + Letsencrypt
      • minikube Ingress
      • Traefik Ingress
      • Keepalived-VIP
    • Cloud Provider 擴展
    • Device 插件
  • 服務治理
    • 服務治理
      • 一般準則
      • 滾動升級
      • Helm
      • Operator
      • Service Mesh
      • Linkerd
      • Linkerd2
    • Istio
      • 安裝
      • 流量管理
      • 安全管理
      • 策略管理
      • 度量管理
      • 排錯
      • 社區
    • Devops
      • Draft
      • Jenkins X
      • Spinnaker
      • Kompose
      • Skaffold
      • Argo
      • Flux GitOps
  • 實踐案例
    • 實踐概覽
    • 資源控制
    • 集群高可用
    • 應用高可用
    • 調試
    • 端口映射
    • 端口轉發
    • 用戶管理
    • GPU
    • HugePage
    • 安全
    • 審計
    • 備份恢復
    • 證書輪換
    • 大規模集群
    • 大數據與機器學習
      • Spark
      • Tensorflow
    • Serverless
  • 排錯指南
    • 排錯概覽
    • 集群排錯
    • Pod 排錯
    • 網絡排錯
    • PV 排錯
      • AzureDisk
      • AzureFile
    • Windows 排錯
    • 雲平臺排錯
      • Azure
    • 排錯工具
  • 社區貢獻
    • 開發指南
    • 單元測試和集成測試
    • 社區貢獻
  • 附錄
    • 生態圈
    • 學習資源
    • 國內鏡像
    • 如何貢獻
    • 參考文檔
Powered by GitBook
On this page
  • 配置開發環境
  • 單元測試
  • 端到端測試
  • Node e2e 測試
  • 有用的 git 命令
  • 其他參考
  1. 社區貢獻

開發指南

配置開發環境

以 Ubuntu 爲例,配置一個 Kubernetes 的開發環境

apt-get install -y gcc make socat git build-essential

# 安裝 Docker
sh -c 'echo"deb https://apt.dockerproject.org/repo ubuntu-$(lsb_release -cs) main"> /etc/apt/sources.list.d/docker.list'
curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D
apt-get update
apt-get -y install "docker-engine=1.13.1-0~ubuntu-$(lsb_release -cs)"

# 安裝 etcd
ETCD_VER=v3.2.18
DOWNLOAD_URL="https://github.com/coreos/etcd/releases/download"
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
sudo /bin/cp -f etcd-${ETCD_VER}-linux-amd64/{etcd,etcdctl} /usr/bin
rm -rf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz etcd-${ETCD_VER}-linux-amd64

# 安裝 Go
curl -sL https://storage.googleapis.com/golang/go1.10.2.linux-amd64.tar.gz | tar -C /usr/local -zxf -
export GOPATH=/gopath
export PATH=$PATH:$GOPATH/bin:/usr/local/bin:/usr/local/go/bin/

# 下載 Kubernetes 代碼
mkdir -p $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/kubernetes $GOPATH/src/k8s.io/kubernetes
cd $GOPATH/src/k8s.io/kubernetes

# 啓動一個本地集群
export KUBERNETES_PROVIDER=local
hack/local-up-cluster.sh

打開另外一個終端,配置 kubectl 之後就可以開始使用了:

cd $GOPATH/src/k8s.io/kubernetes
export KUBECONFIG=/var/run/kubernetes/admin.kubeconfig
cluster/kubectl.sh

單元測試

單元測試是 Kubernetes 開發中不可缺少的,一般在代碼修改的同時還要更新或添加對應的單元測試。這些單元測試大都支持在不同的系統上直接運行,比如 OSX、Linux 等。

比如,加入修改了 pkg/kubelet/kuberuntime 的代碼後,

# 可以加上 Go package 的全路徑來測試
go test -v k8s.io/kubernetes/pkg/kubelet/kuberuntime
# 也可以用相對目錄
go test -v ./pkg/kubelet/kuberuntime

端到端測試

端到端(e2e)測試需要啓動一個 Kubernetes 集群,僅支持在 Linux 系統上運行。

本地運行方法示例:

make WHAT='test/e2e/e2e.test'
make ginkgo

export KUBERNETES_PROVIDER=local
go run hack/e2e.go -v -test --test_args='--ginkgo.focus=Port\sforwarding'
go run hack/e2e.go -v -test --test_args='--ginkgo.focus=Feature:SecurityContext'

注:Kubernetes 的每個 PR 都會自動運行一系列的 e2e 測試。

Node e2e 測試

Node e2e 測試需要啓動 Kubelet,目前僅支持在 Linux 系統上運行。

export KUBERNETES_PROVIDER=local
make test-e2e-node FOCUS="InitContainer"

注:Kubernetes 的每個 PR 都會自動運行 node e2e 測試。

有用的 git 命令

很多時候,我們需要把 Pull Request 拉取到本地來測試,比如拉取 Pull Request #365 的方法爲

git fetch upstream pull/365/merge:branch-fix-1
git checkout branch-fix-1

當然,也可以配置 .git/config 並運行 git fetch 拉取所有的 Pull Requests(注意 Kubernetes 的 Pull Requests 非常多,這個過程可能會很慢):

fetch = +refs/pull/*:refs/remotes/origin/pull/*

其他參考

  • 編譯 release 版:make quick-release

Previous排錯工具Next單元測試和集成測試

Last updated 1 year ago

機器人命令: 和 。

,包含所有的測試歷史

,包含所有的 Pull Request 狀態以及合併隊列

,包含 Node 組性能測試報告

,包含 Density 和 Load 測試報告

,包含主要關注的 Pull Request 列表(需要以 Github 登錄)

和 ,包含所有 Pull Request 的 Jenkins 測試日誌

命令列表
使用文檔
Kubernetes TestGrid
Kuberentes Submit Queue Status
Node Performance Dashboard
Kubernetes Performance Dashboard
Kubernetes PR Dashboard
Jenkins Logs
Prow Status