從源碼構建Kubernetes環境

Kubernetes是什麼

它是一個管理底層容器(Docker)的自動化平臺。

 

程序列表:

etcd-v3.2.28-linux-amd64.tar.gz     KV存儲倉庫,可以配置共享和服務發現。

kubernetes 版本 v1.18.0-alpha.0  k8s源碼包,基於當前最新版本

Docker 容器引擎   18.09.3

GoLang     1.13.4 linux/amd64  Go語言SDK,這個版本支持gomodule機制,終於可以擺脫GOPATH了。

首先運行etcd存儲倉庫,默認的監聽端口2379

nohup /root/soft/etcd/etcd &

  • 編譯Kubernetes源碼,時間較長大概十幾分鍾。
mkdir -p $GOPATH/src/k8s.io
cd $GOPATH/src/k8s.io
git clone https://github.com/kubernetes/kubernetes
cd kubernetes
make

  • k8s 組件介紹

kube-apiserver  提供了操作各類k8s對象的api接口。

kube-scheduler  調度組件,決策pod最佳位置

kube-controller-manager 管理中心,負責集羣內的Node、Pod副本、服務端點(Endpoint)、命名空間(Namespace)、服務賬號(ServiceAccount)、資源定額(ResourceQuota)的管理

  kubectl  k8s管理命令行接口

kubelet    k8s客戶端進程,與服務端交互,執行具體的操作。

創建證書,後面用於構建pod

openssl genrsa -out /root/projects/goproj/src/k8s.io/saccount.key 2048

安裝 kube-apiserver

cd cmd/kube-apiserver
go build .
nohup /root/projects/goproj/src/k8s.io/kubernetes/cmd/kube-apiserver/kube-apiserver --storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --enable-swagger-ui=true --service-cluster-ip-range=192.168.4.0/24 --service-account-key-file=/root/projects/goproj/src/k8s.io/saccount.key &

 

安裝 kube-scheduler

cd cmd/kube-scheduler
go build .
/root/projects/goproj/src/k8s.io/kubernetes/cmd/kube-scheduler/kube-scheduler --master=http://localhost:8080

安裝 kube-controller-manager

cd cmd/kube-controller-manager
go build .
/root/projects/goproj/src/k8s.io/kubernetes/cmd/kube-controller-manager/kube-controller-manager --master=http://127.0.0.1:8080 --service-account-private-key-file=/root/projects/goproj/src/k8s.io/saccount.key

安裝 kubelet

cd cmd/kubelet
go build .
/root/projects/goproj/src/k8s.io/kubernetes/cmd/kubelet/kubelet --kubeconfig=/etc/kubeconfig --hostname-override=172.16.1.183 --pod-infra-container-image=mirrorgooglecontainers/pause:3.1 --fail-swap-on=false

安裝kubectl

創建配置文件

apiVersion: v1
clusters:
- cluster:
    server: http://IP:8080
  name: kubernetes
kind: Config
preferences: {}
current-context: kubernetes-admin@kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
users:
- name: kubernetes-admin
  user:
cd cmd/kubelet
go build .
nohup /root/projects/goproj/src/k8s.io/kubernetes/cmd/kubelet/kubelet --kubeconfig=kubeconfig --hostname-override=172.16.1.183 --pod-infra-container-image=mirrorgooglecontainers/pause:3.1 --fail-swap-on=false

至此k8s運行環境已經搭建完畢,接下來就在該環境創建應用。

k8s對象概念

  • POD  

包含實際運行的容器集合

  • Label

容器集合標籤,用於建立Service和Pod的關聯

  • Service 

後端容器的抽象接口,代理對後端容器的訪問(不嚴謹)

  • Replication Controller

pod高可用,根據配置自動調整實際運行的pod數量

 

  • 創建一個Pod 

pod.yaml文件

apiVersion: v1
kind: Pod
metadata:
  name: webapp
  labels:
    app: webapp
spec:
  containers:
  - name: webapp
    image: tomcat
    ports:
    - containerPort: 8080
      hostPort: 8081

kubectl apply -f pod.yaml

查看創建的pod

kubectl get pods

在Pod所有在Node主機訪問 地址 http://IP:8081

至此一個最小化版的k8s環境搭建完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章