• <menu id="sssag"></menu>
  • <menu id="sssag"></menu>
  • 基于Kubernetes/K8S構建Jenkins持續集成平臺(上)-2

    基于Kubernetes/K8S構建Jenkins持續集成平臺()-2

     

    Kubernetes實現Master-Slave分布式構建方案

    傳統JenkinsMaster-Slave方案的缺陷

    Master節點發生單點故障時,整個流程都不可用了

    每個 Slave節點的配置環境不一樣,來完成不同語言的編譯打包等操作,但是這些差異化的配置導致管理起來非常不方便,維護起來也是比較費勁

    資源分配不均衡,有的 Slave節點要運行的job出現排隊等待,而有的Slave節點處于空閑狀態

    資源浪費,每臺 Slave節點可能是實體機或者VM,當Slave節點處于空閑狀態時,也不會完全釋放掉資源

    以上種種問題,我們可以引入Kubernates來解決!

     

    Kubernetes簡介

    Kubernetes(簡稱,K8S)是Google開源的容器集群管理系統,在Docker技術的基礎上,為容器化的   應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提高了大規模容器集群管理的  便捷性。 其主要功能如下:

    使用Docker對應用程序包裝(package)、實例化(instantiate)、運行(run)。

    以集群的方式運行、管理跨機器的容器。以集群的方式運行、管理跨機器的容器。  

    解決Docker跨機器容器之間的通訊問題。解決Docker跨機器容器之間的通訊問題。

    Kubernetes的自我修復機制使得容器集群總是運行在用戶期望的狀態。

     

    Kubernates+Docker+Jenkins持續集成架構圖

     

     

     

     

    大致工作流程:手動/自動構建 -> Jenkins 調度 K8S API ->動態生成 Jenkins Slave pod - Slave pod 拉取 Git 代碼/編譯/打包鏡像 -

    推送到鏡像倉庫 Harbor - Slave 工作完成,Pod 自動銷毀 ->部署到測試或生產 Kubernetes平臺。(完全自動化,無需人工干預)

     

     

    Kubernates+Docker+Jenkins持續集成方案好處

    服務高可用 Jenkins Master 出現故障時,Kubernetes 會自動創建一個新的 Jenkins Master容器,

    并且將 Volume 分配給新創建的容器,保證數據不丟失,從而達到集群服務高可用。

    動態伸縮,合理使用資源每次運行 Job 時,會自動創建一個 Jenkins Slave,Job 完成后,Slave 自動注銷并刪除容器,資源自動釋放,

    而且 Kubernetes 會根據每個資源的用情況,動態分配Slave 到空閑的節點上創建,降低出現因某節點資源利用率高,還排隊等待在該節點的情況。

    擴展性好 Kubernetes 集群的資源嚴重不足而導致 Job 排隊等待時,可以很容易的添加一個Kubernetes Node 到集群中,從而實現擴展。

     

    Kubeadm安裝Kubernetes

    Kubernetes的架構

     

     

     

    API  Server:用于暴露Kubernetes  API,任何資源的請求的調用操作都是通過kube-apiserver提供的接口進行的。

    Etcd:是Kubernetes提供默認的存儲系統,保存所有集群數據,使用時需要為etcd數據提供備份計    劃。

    Controller-Manager:作為集群內部的管理控制中心,負責集群內的Node、Pod副本、服務端點

    (Endpoint)、命名空間(Namespace)、服務賬號(ServiceAccount)、資源定額

    (ResourceQuota)的管理,當某個Node意外宕機時,Controller Manager會及時發現并執行自動化修復流程,確保集群始終處于預期的工作狀態。

    Scheduler:監視新創建沒有分配到Node的Pod,為Pod選擇一個Node。

     

    Kubelet:負責維護容器的生命周期,同時負責Volume和網絡的管理

    Kube proxy:是Kubernetes的核心組件,部署在每個Node節點上,它是實現Kubernetes Service的通信與負載均衡機制的重要組件。

     

    安裝環境說明

     

    主機名稱

    IP地址

    安裝的軟件

    代碼托管服務器

     

    20.0.0.20

     

    Gitlab-12.4.2

    Docker倉庫服務器

     

    20.0.0.50

     

    Harbor1.9.2

     

    k8s-master

     

    20.0.0.10

    kube-apiserver、kube-controller-manager、kube- scheduler、docker、etcd、calico,NFS

    k8s-node1

    20.0.0.70

    kubelet、kubeproxy、Docker18.06.1-ce

    k8s-node2

    20.0.0.80

    kubelet、kubeproxy、Docker18.06.1-ce

     

     

     

    三臺機器都需要完成

    首先全部安裝docker

    然后:

    修改三臺機器的hostnamehosts文件

    hostnamectl set-hostname k8s-master
    hostnamectl set-hostname k8s-node1 
    hostnamectl set-hostname k8s-node2
    
    vim /etc/hosts
    
    20.0.0.10 k8s-master 
    20.0.0.70 k8s-node1
    20.0.0.80 k8s-node2
    

      

    關閉防火墻和關閉SELinux

    systemctl stop ?rewalld systemctl disable ?rewalld
    setenforce 0 臨時關閉
    vi /etc/syscon?g/selinux 
    永久關閉改為SELINUX=disabled
    

      

    設置系統參數,加載br_netfilter模塊,不然后面會報錯

    modprobe br_netfilter
    

      

    設置允許路由轉發,不對bridge的數據進行處理創建文件

    vim /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
    

      

    執行文件

    sysctl -p /etc/sysctl.d/k8s.conf
    

      

     

    kube-proxy開啟ipvs的前置條件

    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    

      

    chmod 755 /etc/sysconfig/modules/ipvs.modules && bash 
    
    /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    

      

     

    所有節點關閉

    swapo? -a 臨時關閉
    vi /etc/fstab 永久關閉注釋掉以下字段一般在末尾一行
    /dev/mapper/cl-swap swap swap defaults 0 0
    

      

    安裝kubelet、kubeadm、kubectl kubeadm: 用來初始化集群的指令。

    kubelet: 在集群中的每個節點上用來啟動 pod container 等。

    kubectl: 用來與集群通信的命令行工具。

     

    清空yum緩存

    yum clean all
    

      

    設置Yum安裝源

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

      

     

    安裝:(1.20之前的版本否則不支持 k8s1.20以后不兼容docker)

    yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0
    

      

     

    kubelet我們可以先設置一下開機自啟和看一下版本 (注意:先不啟動,現在啟動的話會報錯)

     

    systemctl enable kubelet
    查看版本
    kubelet --version
    

     

      

     

     

     Master節點需要完成的:

     

    1)運行初始化命令(具備docker環境)

    kubeadm init --kubernetes-version=1.17.0 \
    
    --apiserver-advertise-address=20.0.0.10 \
    
    --image-repository registry.aliyuncs.com/google_containers \
    
    --service-cidr=10.1.0.0/16 \
    
    --pod-network-cidr=10.244.0.0/16
    

    注意:apiserver-advertise-address這個地址必須是master機器的IP 

     

    2) 啟動kubelet

    systemctl restart kubelet
    

      

    3) 配置kubectl工具(一般裝完上面會提示你三條命令 依次執行就行了)

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

      

    4)然后就是安裝Calico:

    mkdir k8s
    cd k8s
    

      

     

    不檢查憑證下載calico.yaml

     

    wget --no-check-certificate https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
    

     

     

    地址更改,方便從節點通信

     

    sed -i 's/20.0.0.0/10.244.0.0/g' calico.yaml
    

     

    kubectl apply -f calico.yaml
    

      

    5) 查看所有Pod的狀態,確保所有Pod都是Running狀態

    kubectl get pod --all-namespaces -o wide
    

     

     

     

     

    Slave節點需要完成  (也就是node1,2)

    1)讓所有節點讓集群環境,使用之前Master節點產生的命令加入集群

    kubeadm join 20.0.0.10:6443 --token fww6qy.mf2c32wtatulk506 \
        --discovery-token-ca-cert-hash sha256:bb126b5525f3e34a41cd8e4d55b4bb549753bc6794e52cd6432205f6e1731f3c
    

      

    2) 啟動kubelet

    systemctl start kubelet
    
    systemctl status kubelet   #查看狀態
    

      

     

    2) 回到Master節點查看,如果Status全部為Ready,代表集群環境搭建成功?。?!

    kubectl get nodes   #全部ready  就可以 了
    

      

     

    補充:

    kubectl常用命令

    kubectl get nodes	#查看所有主從節點的狀態
    kubectl get ns	        #獲取所有namespace資源
    kubectl get pods -n {$nameSpace}	          #獲取指定namespace的pod
    kubectl describe pod的名稱   -n {$nameSpace}	  #查看某個pod的執行過程
    kubectl logs --tail=1000 pod的名稱 | less	  #查看日志
    kubectl create -f xxx.yml #通過配置文件創建一個集群資源對象
    kubectl delete -f xxx.yml #通過配置文件刪除一個集群資源對象

      

     

    posted @ 2022-03-07 21:27  隱姓埋名4869  閱讀(186)  評論(0編輯  收藏  舉報
    国产在线码观看超清无码视频,人妻精品动漫H无码,十大看黄台高清视频,国产在线无码视频一区二区三区,国产男女乱婬真视频免费,免费看女人的隐私超爽,狠狠色狠狠色综合久久蜜芽