1. 程式人生 > >Kubernetes對象之Pod詳解(附安裝部署方法)

Kubernetes對象之Pod詳解(附安裝部署方法)

虛擬化技術 kubernetes docker

首先介紹一下K8S是什麽:(引用自K8S中文社區)

Kubernetes是容器集群管理系統,是一個開源的平臺,可以實現容器集群的自動化部署、自動擴縮容、維護等功能。

通過Kubernetes你可以:

  • 快速部署應用

  • 快速擴展應用

  • 無縫對接新的應用功能

  • 節省資源,優化硬件資源的使用

其實K8S能夠做的事情有很多,而且操作簡單,十分方便,下面先介紹如何安裝,然後是對於pod詳細介紹,如果你對docker還不怎麽了解,可以先參考前面的文章學習一下!

環境介紹:

CentOS 7.2

Kubernetes 1.5.2

docker 1.12.1


一.安裝配置

1.安裝K8S

yum -y install kubernetes

這個命令會同時安裝kube-apiserver,kube-controller-manager,kubelet,kube-proxy,kube-scheduler


2.更改服務器端設置

vim /etc/kubernetes/apiserver

###
# kubernetes system config
#
# The following values are used to configure the kube-apiserver
#

# The address on the local server to listen to.
#KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"
KUBE_API_ADDRESS="--address=0.0.0.0"

# The port on the local server to listen on.
KUBE_API_PORT="--port=8080"

# Port minions listen on
KUBELET_PORT="--kubelet-port=10250"

# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"

# Address range to use for services
#KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_SERVICE_ADDRESSES="--portal_net=10.254.0.0/16"

# default admission control policies
#KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"

# Add your own!
KUBE_API_ARGS=""

vim /etc/kubernetes/controller-manager #指定客戶端主機的ip地址

KUBELET_ADDRESSES="--machines= 192.168.6.109"

vim /etc/kubernetes/kubelet #這個鏡像是k8s構建pod必備鏡像,如果不能從默認位置下載可以先在私庫中單獨下載這個鏡像,這裏6.109是一個私庫

#KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=192.168.6.109:5000/pod-infrastructure:latest"

3.啟動相關服務

systemctl start kube-apiserver kube-controller-manager kubelet kube-proxy kube-scheduler


4.在pod創建過程中如果想讓docker從私庫中拉取鏡像,同樣需要去掉相關證書驗證

vim /etc/docker/daemon.json

{ "insecure-registries":["192.168.6.109:5000"]

5.重啟docker服務

systemctl restart docker


二.節點(Node)安裝

1.安裝K8S

yum -y install kubernetes


2.更改節點(Node)設置

vim /etc/kubernetes/apiserver

KUBE_ETCD_SERVERS="--etcd-servers=
KUBE_API_ADDRESS="--insecure-bind-address=192.168.6.200"

vim /etc/kubernetes/config

KUBE_MASTER="--master=http://192.168.6.200:8080"

vim /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=192.168.6.109"
KUBELET_API_SERVER="--api-servers=http://192.168.6.200:8080"


3.啟動相關服務,節點端必須開放10250端口

systemctl start kubelet kube-proxy


4.查看節點是否正常,在服務器端執行

kubectl get node #此時應該存在2個節點,一個本機,一個節點


二.Pod是個什麽東西

在K8S中,Pod是創建或部署的最小/最簡單的基本單位,一個Pod是由多個Docker容器組成的容器組

技術分享圖片

如圖所示,每個pod包含至少一個標簽,標簽的形式是key:value,這樣可以更快地匹配到對應的pod,service主要的功能是暴露pod對應的端口,或是做負載均衡使用!下一節再詳細討論service的用法。

1.Pod應用實例

vim obj.json

{
  "kind": "Pod",                             #類型,獨立的Pod
  "apiVersion": "v1",                        #API版本
  "metadata": {                              
      "name": "podtest",                     #pod名稱
      "labels": {
	  "name": "nginx-server"             #標簽
}
},
"spec": {
    "containers":[{                          
	 "name": "master1",                  #第一個容器的名稱
         "image": "nginx",                   #使用的鏡像
         "ports":[{                          
	     "containerPort": 80,            #容器內的端口
	     "hostPort": 8811                #映射的主機端口
	 }],
     "volumeMounts": [{                      #數據卷
	     "mountPath": "/var/log/nginx",  #容器內的目錄
	     "name": "nginx-conf"            #數據卷名稱
	 }]
     },{
         "name": "master2",                  #第二個容器的名稱
	 "image": "redis",
	 "ports":[{
	     "containerPort": 6379,
	     "hostPort": 7480
         }]
     }],
   "volumes": [{
	 "name": "nginx-conf",              #對應上面的數據卷名稱
	 "emptyDir": {}                     #本地掛載目錄,這裏是空目錄,路徑在/$K8S安裝路徑/pkg/volume/empty_dir
   }]
  }
}

2.創建這個Pod

kubectl create -f obj.json

pod "podtest" created


3.查看已經創建的Pod

kubectl get pod

技術分享圖片

如果提示有2個正在運行則為正常,如果不是,可以查看具體錯誤日誌


4.查看Pod運行日誌

kubectl logs podtest master1/master2


5.查看創建pod的細節

kubectl describe pod podtest


6.在節點上查看容器創建情況

docker ps

技術分享圖片

可以看到一共創建了3個容器,第三個容器提供網絡和端口支持,上面兩個分別提供nginx和redis服務,這時如果訪問curl 192.168.6.109:8811 則會出現預先設置好的頁面!


7.pod刪除

如果想修改其中的配置,則需要先刪除pod再進行創建

kubectl delete -f obj.json

kubectl delete pod podtest


8.擴展查詢

kubectl get pod -o wide

可以得到Pod的運行ip,節點使用情況


Kubernetes對象之Pod詳解(附安裝部署方法)