1. 程式人生 > 其它 >Kubernetes搭建(二)

Kubernetes搭建(二)

一、The hard way

Kelsey Hightower :https://github.com/kelseyhightower這種方式搭建Kubernetes的環境方式可以說是最難的了。他的github中有一個kubernetes-the-hard-way,裡面寫了一個k8s比較困難的搭建方式,我是作為一個瞭解看了下,沒真試過他的方式,有興趣的可以自己玩

二、線上play-with-k8s

1、瀏覽器訪問https://labs.play-with-k8s.com/並登陸(可用dockerhub賬號直接登入),有4個小時的實踐時間。

2、點選 +ADD NEW INSTANCE新增第一個例項

3、部署第一個節點

初始化master節點,執行:

[node1 ~]$ kubeadm init --apiserver-advertise-address $(hostname -i)

執行完畢後,記錄下kubeadm join命令,後面會在其他節點上執行

4、部署其他2個節點

點選 +ADD NEW INSTANCE,繼續新增2個例項

在這些例項中分別執行:

[node2 ~]$ kubeadm join 192.168.0.8:6443 --token 53x6g3.pbdsl4gvnpj22ifx \
--discovery-token-ca-cert-hash sha256:65cec51046d85c224ad56ede5480752515ab39d31a0675b307208c360a1bcf90

[node3 ~]$ kubeadm join 192.168.0.8:6443 --token 53x6g3.pbdsl4gvnpj22ifx \
--discovery-token-ca-cert-hash sha256:65cec51046d85c224ad56ede5480752515ab39d31a0675b307208c360a1bcf90

5、執行完畢後,在master節點上執行:

[node1 ~]$ kubectl get nodes 【看到三個節點已部署完成。】

此時節點的狀態為NotReady,繼續在master上部署網路代理:

[node1 ~]$ kubectl apply -n kube-system -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 |tr -d '\n')"

再次檢視節點狀態已經為Ready:

6、查詢叢集資訊

[node1 ~]$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.0.8:6443
KubeDNS is running at https://192.168.0.8:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

7、部署nginx服務

在mater上執行:

[node1 ~]$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx-app.yaml

每個nginx會自動被部署到node節點中,預設是隨機選擇3個節點。檢視pod狀態:[node1 ~]$ kubectl get pods -o wide

pod為Running狀態表示部署成功,正常執行中:

檢視服務狀態:[node1 ~]$ kubectl get svc

可以看到"my-nginx-svc"服務已經啟動,內部80埠被對映到了外部30625埠:

[node1 ~]$ss -anlp|grep 30628:30628埠的確被監聽,通過kube-proxy網路管理實現:

8、開放埠,本機訪問

將pod上的80埠暴漏給master節點:

[node1 ~]$ kubectl expose deploy/my-nginx --port 80

檢視服務地址:[node1 ~]$ kubectl get svc my-nginx -o go-template --template '{{ .spec.clusterIP }}'

10.106.167.239

[node1 ~]$ curl 10.106.167.239

得到nginx的預設歡迎介面,至此在k8s上部署nginx完成。

三、Cloud上搭建

kops是雲上搭建的解決方案,網址是:https://github.com/kubernetes/kops,這個方案網上有很詳細的說明,我就不搭建了,因為這玩意是雲上方案,真要搞成生產級別的話很多元件是要收費的,所以對於我個人目前來說沒什麼意義;

四、企業級解決方案CoreOS

cireos是企業的解決方案,網址是:https://coreos.com/tectonic/,這個搭建方式也很簡單,所以不做說明

五、使用Minikube搭建單節點K8s(需要kexue上網)

kubectl官網 :https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows minikube官網 :https://kubernetes.io/docs/tasks/tools/install-minikube/

5.1、安裝kubectl

官網:https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

1、在 Linux 上使用 curl 安裝 kubectl 二進位制檔案

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

2、驗證二進位制檔案(可選)下載 kubectl 校驗和檔案:

curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"

根據校驗和檔案驗證 kubectl 二進位制檔案:

echo "$(<kubectl.sha256)  kubectl" | sha256sum --check

如果有效,則輸出為:kubectl: OK;如果檢查失敗,sha256則以非零狀態退出並列印類似於以下內容的輸出:

kubectl: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match

注意:下載相同版本的二進位制檔案和校驗和。

3、安裝 kubectl

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

4、檢查是否配置成功

kubectl version

5.2、安裝minikube

1、下載

wget https://github.com/kubernetes/minikube/releases/download/v1.5.2/minikube-linux-amd64

2、配置環境變數

sudo mv minikube-linux-amd64 minikube && chmod +x minikube && mv minikube /usr/local/bin/

3、檢查

minikube version
使用minikube建立單節點的k8s
minikube start --vm-driver=none --image-repository=gcr.azk8s.cn/google- containers

6、感受一下Kubernetes

也是下載安裝kubectl和minikube,選擇virtualbox,然後minikube start,就可以通過kubectl操作

6.1、檢視連線資訊

kubectl config view 
kubectl config get-contexts
kubectl cluster-info

6.2、體驗Pod

(1)建立pod_nginx.yaml
resources/basic/pod_nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
(2)根據pod_nginx.yaml檔案建立pod
kubectl apply -f pod_nginx.yaml
(3)檢視pod
kubectl get pods 
kubectl get pods -o wide
kubectl describe pod nginx
(4)進入nginx容器
# kubectl進入 
kubectl exec -it nginx bash
# 通過docker進入
minikube ssh
docker ps
docker exec -it containerid bash
(5)訪問nginx,埠轉發
# 若在minikube中,直接訪問 
# 若在物理主機上,要做埠轉發
kubectl port-forward nginx 8080:80
(6)刪除pod
kubectl delete -f pod_nginx.yaml
小結 :通過Minikube,使用kubectl操作單節點的K8S,而且也能感受到pod的建立和刪除,包括pod中對應的容器 這短短的一生我們最終都會失去,不妨大膽一點,愛一個人,攀一座山,追一個夢