在centos7部署k8s搭建kubernetes集羣

Kubernetes是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。

Kubernetes一個核心的特點就是能夠自主的管理容器來保證雲平臺中的容器按照用戶的期望狀態運行着(比如用戶想讓apache一直運行,用戶不需要關心怎麼去做,Kubernetes會自動去監控,然後去重啓,新建,總之,讓apache一直提供服務),管理員可以加載一個微型服務,讓規劃器來找到合適的位置,同時,Kubernetes也系統提升工具以及人性化方面,讓用戶能夠方便的部署自己的應用(就像canary deployments)。

本環境2臺配置爲2核2G CentOS的機器。

1.1.概念

kubernetes(通常稱爲k8s)用於自動部署、擴展和管理容器化應用程序的開源系統。它旨在提供“跨主機集羣的自動部署、擴展以及運行應用程序容器的平臺”。支持一系列容器工具 ,包括Docker等。

1.2.特點

  • 可移植:支持公有云、私有云、混合雲、多重雲

  • 可擴展:模塊化、插件化、可掛載、可組合

  • 自動化:自動部署、自動重啓、自動複製、自動伸縮/擴展

  • 快速部署應用,快速擴展應用

  • 無縫對接新的應用功能

  • 節約資源、優化硬件資源的使用

2.kubernetes中的相關概念

2.1.Cluster

計算、存儲和網絡資源的集合,Kubernetes利用這些資源運行各種基於容器的應用

2.2Master

是Cluster的大腦,主要職責是調度,即決定將應用放在哪裏運行。Master運行Linux操作系統,可以是物理機或者虛擬機。爲了是實現高可用,可以運行多個Master。

2.3Node

職責是運行容器應用。Node 由 Master 管理,Node 負責監控並彙報容器的狀態,並根據 Master 的要求管理容器的生命週期。Node 運行在 Linux 操作系統,可以是物理機或者是虛擬機。

2.4Pod

Pod 是 Kubernetes 的最小工作單元。每個 Pod 包含一個或多個容器。Pod 中的容器會作爲一個整體被 Master 調度到一個 Node 上運行。

2.5Controller

Kubernetes 通常不會直接創建 Pod,而是通過 Controller 來管理 Pod 的。Controller 中定義了 Pod 的部署特性,比如有幾個副本,在什麼樣的 Node 上運行等。爲了滿足不同的業務場景,Kubernetes 提供了多種 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等,

Deployment 是最常用的 Controller,比如前面在線教程中就是通過創建 Deployment 來部署應用的。Deployment 可以管理 Pod 的多個副本,並確保 Pod 按照期望的狀態運行。

ReplicaSet 實現了 Pod 的多副本管理。使用 Deployment 時會自動創建 ReplicaSet,也就是說 Deployment 是通過 ReplicaSet 來管理 Pod 的多個副本,我們通常不需要直接使用 ReplicaSet。

DaemonSet 用於每個 Node 最多隻運行一個 Pod 副本的場景。正如其名稱所揭示的,DaemonSet 通常用於運行 daemon。

StatefuleSet 能夠保證 Pod 的每個副本在整個生命週期中名稱是不變的。而其他 Controller 不提供這個功能,當某個 Pod 發生故障需要刪除並重新啓動時,Pod 的名稱會發生變化。同時 StatefuleSet 會保證副本按照固定的順序啓動、更新或者刪除。

Job 用於運行結束就刪除的應用。而其他 Controller 中的 Pod 通常是長期持續運行。

3.kubernetes核心組件

3.1組件組成

在這裏插入圖片描述

3.2組件架構圖

http://blog.sina.com.cn/s/blog_7c2ea9010102xcnu.html

環境說明:

操作系統:centos7
Kubenetes版本:1.5
docker版本:1.13

角色 組件
master etcd\ kube-apiserver\ kube-controllor-manager\ kube-scheduler
node kubelet\ kube-proxy\ docker

4.1關閉防火牆,關閉selinux(所有節點)

關閉swap(所有節點)

[root@centos-master ~]# swapoff -a
[root@centos-master ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Fri May 10 10:42:14 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=4a22947a-b3fd-4465-ba32-25edf651df4e /boot                   xfs     defaults        0 0
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0

5.1安裝k8s組件(所有節點)

1. 創建kubenetes的yum源

echo "[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1=
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg" >>/etc/yum.repos.d/kubernetes.repo

2. 在所有主機上(centos-master和centos-minion)都安裝Kubernetes。這對etcd,docker和cadvisor也適用

yum install --enablerepo=kubernetes kubernetes -y
yum install --enablerepo=kubernetes etcd -y
yum install --enablerepo=kubernetes docker cadvisor -y

注意:kubectl kubelet的rpm包會和kubernetes衝突,兩者只能選其一安裝。另外的可通過rpm -e卸載!

  • 在所有主機的/etc/hosts文件中加入master和node節點,如果DNS中已經有了主機名,就不需要加了。
echo "192.168.3.61  centos-master
192.168.3.71  centos-minion" >>/etc/hosts

3. 編輯/etc/kubernetes/config文件,加入以下內容,若已經存在就不需要加了(注意官方文檔有很多地方格式不對):

# How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://centos-master:8080"

# Comma separated list of nodes in the etcd cluster
#KUBE_ETCD_SERVERS="--etcd_servers=http://centos-master:4001"

# logging to stderr means we get it in the systemd journal
KUBE_LOGTOSTDERR="-logtostderr=true"

# Should this cluster be allowed to run privileged docker containers
KUBE_ALLOW_PRIV="-allow_privileged=false"

5.2配置master主機上Kubernetes服務

1. 按照下面的示例編輯/etc/kubernetes/apiserver文件,一定要注意格式

# The address on the local server to listen to.
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"

# How the replication controller and scheduler find the kube-apiserver
KUBE_MASTER="--master=http://centos-master:8080"

# 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"

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

# Add your own!
KUBE_API_ARGS=""
  • 啓動master上的服務
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done

注:kube-apiserver報錯排查參考
https://blog.csdn.net/qq_23598037/article/details/90116848

2. 配置node節點上的Kubernetes服務 我們需要在節點上配置kubelet並啓動kubelet和proxy

按照下面的示例編輯/etc/kubernetes/kubelet文件
# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
KUBELET_ADDRESS="--address=0.0.0.0"

# The port for the info server to serve on
KUBELET_PORT="--port=10250"

# You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname_override=centos-minion"

# location of the api-server
KUBELET_API_SERVER="--api_servers=http://centos-master:8080"

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

# Add your own!
KUBELET_ARGS=""
  • 啓動節點上(node)上的服務
for SERVICES in kube-proxy kubelet docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done

注:
docker和kube-proxy啓動報錯排查參考
https://blog.csdn.net/qq_23598037/article/details/90116418
https://blog.csdn.net/qq_23598037/article/details/90116634

已完成,通過如下可以看到節點信息
$ kubectl get nodes

相關文章:
kubernetes基於Metrics Server的HPA彈性伸縮pod
通過rancher快速部署Kubernetes集羣
在centos7部署k8s搭建kubernetes集羣

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