作者:潘吉祥
環境準備
1. centOS-7(虛擬機或物理機均可)
2. 關閉防火牆,更新源
systemctl disable firewalld #禁用防火牆
systemctl stop firewalld #關閉防火牆
yum update #更新yum源
3.安裝etcd和kubernetes
etcd作爲kubernetes的信息保存中心,相當於我們熟知的zookeeper。
這裏的快速演示相當於將一臺機器同時作爲master和worker。
關於etcd和master以及worker等會再後面的kubernetes架構中詳細說明,這裏先做演示。
yum install -y etcd kubernetes
*注意:kubernetes會連帶安裝docker,如果你的機器之前安裝過docker,建議卸載,即使在安裝時添加參數跳過依賴,還是會出現kubernetes相關服務無法啓動(筆者已入坑)。
快速體驗
1.依次次啓動相關的服務
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
爲方便後續使用,這裏給出簡單的啓動和關閉腳本:
vim k8sStart.sh
#!/bin/bash
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
---
vim k8sStop.sh
#!/bin/bash
systemctl stop etcd
systemctl stop docker
systemctl stop kube-apiserver
systemctl stop kube-controller-manager
systemctl stop kube-scheduler
systemctl stop kubelet
systemctl stop kube-proxy
同樣,關於這些服務的詳細作用我們後面在kubernetes架構中會講到。
2.查看狀態
systemctl status xxx #查看某個服務的狀態,比如:
3.編寫pod和service配置文件,並創建pod和service。
官方不建議直接創建pod,我們通過RC(ReplicationController)來管理創建。
我們在 /usr/local/k8s下創建文件:
vim tomcat_rc.yaml
apiVersion: v1 #版本
kind: ReplicationController #類型RC
metadata: #元數據
name: tomcat #RC名字
spec: #rc配置規則
replicas: 2 #容器副本數
selector: #配合labels使用
app: tomcat #選擇標籤爲tomcat的pod
template: #pod模板
metadata: #元數據
labels:
app: tomcat #標籤
spec: #pod詳細定義
containers: #容器
- name: tomcat #容器名稱
image: tomcat: 8.0.18-jre8 #鏡像名
ports:
- containerPort: 8080 #容器端口
kubectl create -f tomcat_rc.yaml #通過RC創建pod
vimtomcat_svc.yaml
apiVersion: v1 #版本號
kind: Service #類型:service
metadata: #元數據
name: tomcat #service名稱
spec:
type: NodePort #訪問模式
ports:
- port: 8080 #映射的容器端口
nodePort: 30000 #對外訪問的端口
selector: #通過標籤選擇pod容器
app: tomcat
kubectl create -ftomcat_svc.yaml #創建service,用於訪問。
[root@localhost k8s]# kubectl create -f tomcat-rc.yaml
replicationcontroller "tomcat" created
[root@localhost k8s]# kubectl create -f tomcat-svc.yaml
service "tomcat" created
4.查看pod和service
kubectl get pods
[root@localhost k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
tomcat-cxd5b 1/1 Running 0 1m
tomcat-tc6hx 1/1 Running 0 1m
kubectl get svc
[root@localhost k8s]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 1d
tomcat 10.254.5.255 <nodes> 8080:30000/TCP 17m
注意
1. 在get pod的時候這裏第一次是會出現No resources found,我們需要對kubectl的配置文件做一些修改:vim /etc/kubernetes/apiserver
找到KUBE_ADMISSION_CONTROL鍵值對,刪除值中的“ServiceAccount”,保存退出即可。
2. 絕大多數情況會出現一直創建的現象:
[root@localhost k8s]# kubectl get pods
NAME READY STATUS RESTARTS AGE
tomcat-cxd5b 0/1 ContainerCreating 0 39s
tomcat-tc6hx 0/1 ContainerCreating 0 39s
這是在pull 鏡像時候的安全驗證出現了問題,你需要做以下的步驟:
a.yum install *rhsm* -y
b.
docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
如果以上兩步能夠成功,則無需以下的步驟(筆者經驗來看一般是不行的/捂臉)
c.搭建自己的私有倉庫,並啓動(我的私有倉庫:192.168.1.20:5000)
d.
docker pull docker.io/tianyebj/pod-infrastructure
e.
docker tag tianyebj/pod-infrastructure 192.168.1.20:5000/pod-infrastructure
f.
docker push 192.168.1.20:5000/pod-infrastructure
g.vi /etc/kubernetes/kubelet
# pod infrastructure container 將原來infrastructure container的拉取地址換爲從自己的私有倉庫拉取
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.1.20:5000/pod-infrastructure:latest"
之後重啓所有的服務即可,稍等容器鏡像(Tomcat)下載完畢,就可以看到是running狀態,原理就是使用docker將鏡像下載到本地,然後kubernetes訪問本地倉庫即可。
3 到此爲止,我們可以試着訪問我們的Tomcat容器:http://192.168.1.20:30000/,其實還是訪問不成功,在搭建好的k8s集羣內創建的容器,只能在其所在的節點上curl可訪問,但是在其他任何主機上無法訪問容器佔用的端口。我們需要設置iptables,iptables -P FORWARD ACCEPT
至此,我們就可以通過kubernetes訪問我們的Tomcat容器啦!你也趕緊試試吧!
有了直觀的體驗,在接下來將會較爲詳細地介紹kubernetes相關知識點,關注不迷路!
肉哥微信好友坑位限時開放啦!
福利來啦!掃碼直接加肉哥微信,送你份學習資料和麪試手冊,一起來圍觀最新技術動態和職場經驗,遇到困惑也可與我交流(情感除外)。一定要備註:開發方向+地點,如:Java+北京。
▲長按加肉哥微信,趕緊上車
【推薦閱讀】