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.yamlresources/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(4)進入nginx容器
kubectl get pods -o wide
kubectl describe pod nginx
# kubectl進入(5)訪問nginx,埠轉發
kubectl exec -it nginx bash
# 通過docker進入
minikube ssh
docker ps
docker exec -it containerid bash
# 若在minikube中,直接訪問(6)刪除pod
# 若在物理主機上,要做埠轉發
kubectl port-forward nginx 8080:80
kubectl delete -f pod_nginx.yaml小結 :通過Minikube,使用kubectl操作單節點的K8S,而且也能感受到pod的建立和刪除,包括pod中對應的容器 這短短的一生我們最終都會失去,不妨大膽一點,愛一個人,攀一座山,追一個夢