Docker+K8S 集群環(huán)境搭建及分布式應用部署
1.安裝docker
yum install docker #啟動服務 systemctl start docker.service systemctl enable docker.service #測試 docker version
2.安裝etcd
yum install etcd -y #啟動etcd systemctl start etcd systemctl enable etcd #輸入如下命令查看 etcd 健康狀況 etcdctl -C http://localhost:2379 cluster-health #安裝 Kubernetes yum install kubernetes -y
安裝好后,編輯文件 /etc/kubernetes/apiserver,將 KUBE_ADMISSION_CONTROL 后面的 ServiceAccount 去掉,如:
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
然后分別啟動以下程序(Master):
systemctl start kube-apiserver systemctl enable kube-apiserver systemctl start kube-controller-manager systemctl enable kube-controller-manager systemctl start kube-scheduler systemctl enable kube-scheduler
接下來啟動 Node 節(jié)點的程序:
systemctl start kubelet systemctl enable kubelet systemctl start kube-proxy systemctl enable kube-proxy
這樣,一個簡單的 K8S 集群環(huán)境就已經搭建完成了,我們可以運行以下命令來查看集群狀態(tài)。
但目前該集群環(huán)境還不能很好的工作,因為需要對集群中 pod 的網絡進行統(tǒng)一管理,所以需要創(chuàng)建覆蓋網絡 flannel。
1.安裝 flannel:
yum install flannel -y
2.編輯文件 /etc/sysconfig/flanneld,增加以下代碼:
--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-prefix=/atomic.io/network --etcd-endpoints=http://localhost:2379 --iface=enp0s3
其中 –iface 對應的是網卡的名字。
3.配置 etcd 中關于 flanneld 的 key
flannel 使用 etcd 進行配置,來保證多個 flannel 實例之間的配置一致性,所以需要在 etcd 上進行如下配置:
etcdctl mk /atomic.io/network/config '{ "Network": "10.0.0.0/16" }'
/atomic.io/network/config 這個 key 與上文 /etc/sysconfig/flannel 中的配置項 FLANNEL_ETCD_PREFIX 是相對應的,錯誤的話啟動就會出錯)
Network 是配置網段,不能和物理機 IP 沖突,可以隨便定義,盡量避開物理機 IP 段。
4.啟動修改后的 flannel ,并依次重啟 docker、kubernete:
systemctl enable flanneld systemctl start flanneld service docker restart systemctl restart kube-apiserver systemctl restart kube-controller-manager systemctl restart kube-scheduler systemctl enable flanneld systemctl start flanneld service docker restart systemctl restart kubelet systemctl restart kube-proxy
這樣,我們將應用部署到 Docker 容器中時,就可以通過物理IP訪問到容器了。
分布式應用部署
1.搭建一個基于 SpringBoot 的框架,這里不再贅述。默認已經搭建好。
2.編寫Dockerfile,內容示例如下:
#下載java8的鏡像 FROM java:8 #將本地文件掛到到/tmp目錄 VOLUME /tmp #復制文件到容器 ADD demo-0.0.1-SNAPSHOT.jar /demo.jar #暴露8080端口 EXPOSE 8080 #配置啟動容器后執(zhí)行的命令 ENTRYPOINT ["java","-jar","/demo.jar"]
通過 docker build 命令創(chuàng)建鏡像:
docker build -t demo .
這時,我們執(zhí)行 docker images 就將看到剛才構建的鏡像,如:
利用 K8S 部署 SpringBoot 應用
1.創(chuàng)建 rc 文件 demo-rc.yaml:
apiVersion: v1 kind: ReplicationController metadata: name: demo spec: # 節(jié)點數,設置為多個可以實現負載均衡效果 replicas: 1 selector: app: demo template: metadata: labels: app: demo spec: containers: - name: demo #鏡像名 image: demo #本地有鏡像就不會去倉庫拉取 imagePullPolicy: IfNotPresent ports: - containerPort: 8080
執(zhí)行以下命令創(chuàng)建 pod:
kubectl create -f demo-rc.yaml
創(chuàng)建成功后,我們可以查看 pod:
ContainerCreating 提示正在創(chuàng)建中,這時可以查看創(chuàng)建日志:
可以發(fā)現他提示:redhat-cat.crt 不存在,我們先通過ll命令查看下該文件:
可以發(fā)現該文件是個鏈接文件,它指向的是 /etc/rhsm/ca/redhat-uep.pem,而這個文件發(fā)現確實不存在,那這個文件又是怎么來的呢?答案就在這個路徑里,我們需要安裝 rhsm 這個軟件,執(zhí)行命令安裝:
yum install *rhsm* -y
等待一段時間后,安裝即完成。
安裝完成后,執(zhí)行 ll 命令查看該文件是否存在:
[root@MiWiFi-R3-srv ~]# ll /etc/rhsm/ca/redhat-uep.pem
ls: 無法訪問/etc/rhsm/ca/redhat-uep.pem: 沒有那個文件或目錄
我們發(fā)現,依然沒有該文件,不過沒關心,我們可以手動創(chuàng)建:
touch /etc/rhsm/ca/redhat-uep.pem
執(zhí)行完以上操作后,我們先將 rc 刪除,再創(chuàng)建:
[root@MiWiFi-R3-srv ~]# kubectl delete rc demo replicationcontroller "demo" deleted [root@MiWiFi-R3-srv ~]# kubectl create -f demo-rc.yaml replicationcontroller "demo" created
等待一段時間后,重新查看 po,我們發(fā)現已經成功啟動:
[root@MiWiFi-R3-srv ~]# kubectl get po NAME READY STATUS RESTARTS AGE demo-hdmxs 1/1 Running 0 1m
這時,我們還無法通過局域網訪問應用,還需要創(chuàng)建 Service:
1.創(chuàng)建 service 文件 demo-svc.yaml:
apiVersion: v1 kind: Service metadata: name: demo spec: type: NodePort ports: - port: 8080 targetPort: 8080 # 節(jié)點暴露給外部的端口(范圍必須為30000-32767) nodePort: 30001 selector: app: demo
2.執(zhí)行命令:
[root@MiWiFi-R3-srv ~]# kubectl create -f demo-svc.yaml service "demo" created
3.我們可以查看剛才創(chuàng)建 service:
這時,我們就可以通過 ip:30001 訪問應用了,如圖:
如果訪問不到,需要關閉防火墻:
systemctl stop firewalld iptables -P FORWARD ACCEPT
到此這篇關于Docker+K8S 集群環(huán)境搭建及分布式應用部署的文章就介紹到這了,更多相關Docker K8S 集群環(huán)境搭建內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker啟動mysql及-e MYSQL_ROOT_PASSWORD=my-secret-pw問題解決
本文主要介紹了docker啟動mysql及-e MYSQL_ROOT_PASSWORD=my-secret-pw問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07