k8s入門之一用kubeadm部署kubernetes單master集羣教程

1、前言

k8s的部署方式:html

  1. 傳統方式,從github上拉取對應的二進制安裝包,解壓安裝各個組件和節點,過程步驟複雜,特別是各組件要通訊,配置各類ca證書。GitHub連接
  2. 因爲傳統方式安裝比較麻煩,因此咱們用kubeadm(k8s官方提供的集羣部署工具)安裝,只需按照如下基本步驟安裝便可:
    • master,nodes機器上安裝:kubelet、kubeadm和docker,其中node和master都要運行在kebulet和docker環境之上
    • Master:用kubeadm init 命令,拉取下載相關的組件鏡像,並啓動相關pods(靜態pods,不受k8s自身管理),相關的pods組件有:etcd、api-server、controller-manager、scheduler
    • Nodes:用kubeadm join命令把nodes加入到k8s集羣中
    • flannel組件,也是運行在pods的守護級進程,起到個nodes的通訊做用。是一個額外的組件(adds on)。GitHub連接
    • kubeadm相關參考文檔

2、準備工做

  1. kubernetes部署圖node

  2. 關閉Firewalld和iptables,時間同步。linux

    sudo systemctl stop firewalldgit

    sudo systemctl disable firewalld`github

  3. 因爲docker會大量生成iptables規則,因此要確保如下這兩個配置是1docker

    cat /proc/sys/net/bridge/bridge-nf-call-ip6tablescentos

    cat /proc/sys/net/bridge/bridge-nf-call-iptablesapi

    ### 網絡配置文件
    cat <<EOF > /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    vm.swappiness=0
    EOF
    
    modprobe br_netfilter  #執行該命令 若是不執行就會在應用k8s.conf時出現加載錯誤
    sysctl -p /etc/sysctl.d/k8s.conf #應用配置文件
  4. 修改host和hostname服務器

    由於集羣節點的名稱會和機器的hostname一致,因此host的解釋名稱統一修改和hostname一致。具體爲:網絡

    • /etc/hosts文件爲(全部節點都是):

      127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

      192.168.33.30 master.k8s.com 192.168.33.31 node1.k8s.com 192.168.33.32 node2.k8s.com 127.0.0.1 node2.k8s.com

    • /etc/hostname爲(master節點爲例)

3、kubelet核心環境安裝192.168.33.32

在master和nodes的機器上都要按照如下步驟,安裝kubelet、kubeadm、docker-ce和kubectl(k8s客戶端工具),具體步驟爲:

  • 指定docker-ce的yum倉庫源

    `cd /etc/yum.repos.d/

    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo`

  • kubernetes阿里雲鏡像倉庫

    指定kubernetes的yum倉庫:

    `cd /etc/yum.repos.d/

    Sudo vi kubernetes.repo`

    kubernetes.repo的配置以下:

    [kubernetes]

    name=Kubernetes Repo

    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

    enabled=1

    gpgcheck=1

    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

  • 而後下載yum-key.gpg和rpm-package-key.gpg

    sudo wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

    sudo wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

    導入:

    sudo rpm --import yum-key.gpg

    sudo rpm --import rpm-package-key.gpg

  • 運行yum repolist 看下docker和kubernetes是否有包了。

  • 運行安裝命令。分別安裝docker-ce,kubelet,kubeadm和kubectl(kubernetes命令行客戶端)

    sudo yum install docker-ce kubelet kubeadm kubectl(默認安裝最新版的)

    如要安裝指定版本,能夠:

    sudo yum list kubelet --showduplicates //查看全部可用版本

    sudo yum install kubelet-1.13.4-0 kubectl-1.13.4-0 kubeadm-1.13.4-0 kubernetes-cni-0.6.0-0

4、設定kubelet

在啓動kubelet前,看看安裝了哪些文件

早期的k8s版本不容許打開swap,會直接start會報錯,咱們先啓動一下看看

因爲kubelet相關配置還沒完成,如今不能直接啓動。先中止,設置開機啓動先。

sudo systemctl stop kubelet

sudo systemctl enable kubelet

sudo systemctl enable docker

修改kubelet配置文件的額外參數:

sudo vi /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--fail-swap-on=false"

5、master配置

  • kubelet設置好後,咱們能夠用kubeamd init命令拉取相關的docker組件鏡像,並啓動對應的pods。

    sudo kubeadm init --kubernetes-version=v1.13.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

    相關參數意思:

    --apiserver-advertise-address:API服務器將通知它正在監聽的IP地址,監聽的地址爲「0.0.0.0」,即本機全部IP地址。

    --apiserver-bind-port:API服務器綁定到的端口。(默認:6443)

    --cert-dir:加載證書的相關目錄(默認:/etc/kubernetes/pki)

    --config:配置文件的路徑。警告:配置文件目前屬於實驗性,還不穩定。

    --ignore-preflight-errors:將錯誤顯示爲警告的檢查列表進行忽略。例如:「IsPrivilegedUser,Swp」。Value 'all'忽略全部檢查中的錯誤。

    --pod-network-cidr:指定pod網絡的IP地址範圍。若是設置,控制平面將爲每一個節點自動分配CIDRs。

    --service-cidr:爲service VIPs使用不一樣的IP地址。(默認「10.96.0.0/12」)

  • 第一次運行,由於要在拉取下載相關的鏡像,因此可能有點慢,能夠預先下載好相關的docker鏡像。v.13.4版本的docker鏡像下載地址,個人百度雲盤連接:https://pan.baidu.com/s/1osvMLNALXBY8FXeN7z3H5Q 提取碼:chsq

    sudo docker save k8s.gcr.io/kube-apiserver > kubelet-apiserver.tar 導出鏡像

    sudo docker load < kubelet-apiserver.tar 導入鏡像

    須要的鏡像有:

    k8s.gcr.io/kube-proxy v1.13.4 fadcc5d2b066 4 weeks ago 80.3MB k8s.gcr.io/kube-scheduler v1.13.4 dd862b749309 4 weeks ago 79.6MB k8s.gcr.io/kube-apiserver v1.13.4 fc3801f0fc54 4 weeks ago 181MB k8s.gcr.io/kube-controller-manager v1.13.4 40a817357014 4 weeks ago 146MB k8s.gcr.io/coredns 1.2.6 f59dcacceff4 4 months ago 40MB k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 6 months ago 220MB k8s.gcr.io/pause 3.1 da86e6ba6ca1 15 months ago 742kB

    初始化完成後,會有如下信息

  • 建立kube目錄,添加kubectl配置,建議用普通用戶運行如下三個命令:

    mkdir -p $HOME/.kube

    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    如沒執行以上三個命令,直接查看nodes信息,會報錯:

    The connection to the server localhost:8080 was refused - did you specify the right host or port?

    運行後,再次查看nodes信息(kubectl get nodes),會如今master的狀態信息是noready,這個是由於缺乏附件flannel

  • 添加網絡附件flannel

    訪問flannel的github:https://github.com/coreos/flannel,此處也有介紹怎麼安裝

    img

    若是Kubernetes版本是1.7以上執行這行命令便可,在線自動獲取部署清單,而後基於此清單下載鏡像啓動並部署

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    咱們在期間用這些命令看看flannel附件服務是否下載和啓動好了:

    docker images

    kubectl get pods --all-namespaces 查看全部名稱空間的pods,能夠看看flannel的pods是否已經running了

    kubectl get ns 查看有哪些命名空間,其中系統級別的pods都在kube-system中

    至此咱們的master就算已經配置完畢了。。。

6、部署notes節點

  1. nodes機器上都要按照第二大步驟(配置好yum源和kubelet),安裝kubelet、kubectl、kubeadm和docker-ce

  2. 運行命令:

    sudo kubeadm join 10.0.2.15:6443 --token 9le8zj.k1y8fvr09b4h4pww --discovery-token-ca-cert-hash sha256:10187a814644dab00611161c3079fdeeef579b999c6c506c33ff55dd9bb032fa --ignore-preflight-errors=Swap

    把節點nodes加入,等nodes的機器拉取完鏡像後,這個節點就加入完畢了。能夠用這個命令查看更多pods的擴展信息:

    kubectl get pods -n kube-system -o wide

  3. 咱們在master節點上運行:kubectl get nodes ,能夠看到節點已經成功加入

    至此,咱們簡單的k8s集羣已經部署完畢。。。

7、一些有用的命令

  • sudo netstat -ntlp | grep LISTEN 查看監聽的端口

  • kubectl get pods -n kube-system -o wide 查看pods的更多擴展信息

  • kubectl get ns 獲取全部的命名空間

  • sudo yum list kubelet --showduplicates //查看全部yum包的可用版本

  • kubectl get pods --all-namespaces 查看全部命名空間下的pods

  • 參考連接:http://www.javashuo.com/article/p-neynjjsf-gn.html

相關文章
相關標籤/搜索