原創 | k8s系列教程二:快速入門

作者:潘吉祥


環境準備

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+北京。

▲長按加肉哥微信,趕緊上車


【推薦閱讀

原創 | k8s系列教程一:開篇

5分鐘白嫖20個在線工具類網站

歷史上最簡單的一道Java面試題,但無人能通過

面試官:Thread.sleep(0) 有什麼用?

別用Date了,Java8新特性之日期處理,現在學會也不遲!

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