Devops從入門到精通--kubernetes的安裝及配置-第一章-第一節【編排篇】

意義

          kubernetes(k8s)是一個編排容器的工具,其實也是管理應用的全生命週期的一個工具,從創建應用,應用的部署,應用提供服務,擴容縮容應用,應用更新,都非常的方便,而且可以做到故障自愈,例如一個服務器掛了,可以自動將這個服務器上的服務調度到另外一個主機上進行運行,無需進行人工干涉,功能十分強大、十分牛逼。牛逼我們就要學,不僅要學我們還要會應用。今天開始我們一起研究8s的重要部分,從安裝到使用再到精通。廢話不多說,今日我們要用k8s,首先就得搭建好k8s集羣。下面就開始安裝配置。

規劃

IP地址 主機名 角色 軟硬件限制
192.168.220.128 master deploy ,master1 ,lb1 ,etcd

(1) CPU至少1核,內存至少2G
(2) Linux 內核辦版本至少3.10,使用 CentOS 7
(3) Docker 版本至少 1.9 ,Etcd 版本至少 2.0

192.168.220.129 node1 node
192.168.220.130 node2 node  

#CPU至少1核,不然會報錯。

一、必要配置以及準備(所有節點上都執行)

1.1修改主機名/配置hosts

vim /etc/hosts
在文件末尾添加上
192.168.220.128 master
192.168.220.129 node1
192.168.220.130 node2

輸入nmtui 點擊set-hostname並設置主機名爲k8s-master,如下圖

1.2關閉selinux firewalld swap

1.2.1、關閉selinux:

[root@k8s-master ~]# vim /etc/sysconfig/selinux

vim /etc/selinux/config

SELINUX=enforcing 改爲 SELINUX=disabled
setenforce 0  
getenforce 


//輸入getenforce檢驗
[root@localhost ~]# getenforce
Permissive                  //臨時關閉
重啓後輸入getenforce變爲disable則代表永久關閉

或者:

sed -i 's/SELINUX=enforcing/SELINUX=disabled/'  /etc/sysconfig/selinux && setenforce 0
getenforce 

1.2.2、關閉防火牆:

systemctl stop firewalld
systemctl disable firewalld

1.2.3、關閉swap:

#查看swap分區 若swap爲0則代表關閉
free -g
#臨時關閉swap分區, 重啓失效;
swapoff -a

#永久關閉swap分區

sed -ri 's/.*swap.*/#&/' /etc/fstab

當swap-total爲0則代表關閉成功。

1.2.4、安裝壓縮包和weget:

yum install unzip lrzsz wget vim -y

1.2.5、開啓ipv4轉發

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

   #sysctl -p這句話的意思是,讓配置生效

1.2.3、配置轉發參數,否則可能會出錯

cat <<EOF > /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
sysctl --system

二、安裝docker-ce及鏡像加速器:(所有節點上都執行)

    一、Centos:
    1、安裝docker依賴的系統工具
    yum install -y yum-utils device-mapper-persistent-data lvm2

    2、添加阿里雲源
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    3、安裝docker-ce

     

yum makecache fast
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-18.06.1.ce-3.el7 -y
systemctl enable docker && systemctl start docker && systemctl status docker

以上可直接複製粘貼執行



#以下爲說明 請不要複製、如果不指定就會安裝最新docker版本

yum list docker-ce --showduplicates | sort -r	#查看遠程倉庫的docker版本
yum install docker-ce -y    #安裝最新docker版本
yum install docker-ce-18.06.1.ce-3.el7 -y	#安裝指定docker版本

4、使docker不再操作iptables,爲docker設置鏡像阿里雲加速器。(可略過,請一行一行復制執行,不要全部複製粘貼)
    

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
 "registry-mirrors": ["https://26ujpd31.mirror.aliyuncs.com"],
  "iptables":false
}
EOF
systemctl daemon-reload && systemctl restart docker && systemctl status docker

二、ubunbtu:

1.apt安裝:https://blog.csdn.net/liqi_q/article/details/83030737

2.離線安裝:https://blog.csdn.net/javalee5156/article/details/83583489

 

三、安裝kubeadm(所有節點上都執行)

1、配置阿里雲的kubernetes國內yum源:(請一行一行復制)
    

cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
1、配置阿里雲的kubernetes國內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 
	EOF

    2、重建yum緩存
    

yum clean all
yum makecache fast

    3、安裝kubeadm,kubelet,kubectl


    yum list kubelet --showduplicates    #查看可用的軟件版本
    #指定版本進行安裝:

yum -y install kubelet-1.12.1-0
yum -y install kubeadm-1.12.1-0
yum -y install kubectl-1.12.1-0


    # 安裝完成後啓動kubelet
    

systemctl enable kubelet && systemctl start kubelet && systemctl status kubelet

    4、看一下部署kubernetes v1.12.0需要哪些鏡像,然後提前進行下載:
    kubeadm config images list --kubernetes-version=v1.12.1
    #通過腳本實現(由於k8s.gcr.io鏡像地址被牆,所以這裏通過keveon地址去下載所需要鏡像,然後再重新tag回k8s.gcr.io):
    vim ./docker.sh    複製以下內容後保存
    

#!/bin/bash
images=`kubeadm config images list --kubernetes-version=v1.12.1|awk -F '/' '{print $2}'`
for image in $images
do
docker pull keveon/$image
if [ $? -eq 0 ];then
    docker tag keveon/$image k8s.gcr.io/$image
    docker rmi keveon/$image
else
    echo "ERROR: 下載鏡像報錯,$image"
fi
done

    # 給予腳本的執行權限:
    chmod +x ./docker.sh
    # 開始執行腳本拉取鏡像:
    sh ./docker.sh

四、初始化kubernetes(只在Master上運行)


    4.1初始化鏡像

    kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.10.0.0/16
    kubeadm init --kubernetes-version=v1.12.1(注:這裏是之前所安裝K8S的版本號) --pod-network-cidr=10.10.0.0/16(注:這裏填寫集羣所在網關,若該網段沒被佔用,可不用修改)
    #注意:在初始化完成後需要將最後一行命令複製下來保存,以便之後各個節點加入集羣。
    命令格式如:kubeadm join.......

    4.2錯誤處理 (可略)

    #如果在初始化時遇到報錯,如:
    [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
    #處理辦法:
    echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables

    [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
    #處理辦法:
    modprobe br_netfilter

    #然後再重新初始化。
    kubeadm reset
    kubeadm init .......(例如:kubeadm init --kubernetes-version=v1.12.1 --pod-network-cidr=10.10.0.0/16)

 

4.3   必要配置

   # 初始化完成後根據提示完成作爲常規用戶所需的操作
    

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

    2、配置kubetl認證信息
    #export KUBECONFIG=/etc/kubernetes/admin.conf (一次性認證,重啓失效)
    # 如果你想持久化的話,直接執行以下命令【推薦】
    

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

4.4  安裝flanel網絡(請一行一行復制執行)

mkdir -p /etc/cni/net.d/
cat <<EOF> /etc/cni/net.d/10-flannel.conf

 

{ 
  “name”: “cbr0”,
  “type”: “flannel”,
  “delegate”: { 
      “isDefaultGateway”: true
  } 
} 
EOF

 

mkdir /usr/share/oci-umount/oci-umount.d -p
mkdir /run/flannel/
cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=10.0.0.0/16
FLANNEL_SUBNET=10.0.53.1/24
FLANNEL_MTU=1450 
FLANNEL_IPMASQ=true 
EOF

4.5  最後需要新建一個flannel.yml文件:
     執行創建flannel
    sysctl net.bridge.bridge-nf-call-iptables=1
    # 下載flannel.yml文件
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    # 修改docker鏡像地址
    sed 's/quay.io\/coreos/registry.cn-beijing.aliyuncs.com\/imcto/g'
    # 安裝flannel
    sudo kubectl apply -f kube-flannel.yml

    5、默認情況下,master節點不參與工作負載,但如果希望安裝出一個all-in-one的k8s環境,則可以執行以下命令,讓master節點成爲一個node節點:
    kubectl taint nodes --all node-role.kubernetes.io/master-

    # 執行之後,運行以下命令,查看節點信息:
    kubectl get nodes

    # 會看到如下的輸出:
    NAME            STATUS     ROLES     AGE       VERSION
    k8s-master      Ready      master    18h       v1.12.1

   到此爲止,我們的kubernetes_master節點搭建完畢,在node節點上只需要輸入kubeadm init時的返回值 kubeadm join....即可加入K8S集羣,加入集羣后會看到以下內容:

(ps:kubeadm init 和join 後 請耐心等待幾分鐘,需要等kubectl get pods --all-namespaces的內容全部變成RUNNING狀態,這也許會花費到您1-10分鐘)

NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   21m     v1.12.1
node1    Ready    <none>   9m23s   v1.12.1

到此,搭建工作完成!!

 

4.6錯誤處理:(可略)

   若k8s創建容器一直處於ContainerCreating的狀態

    則複製下面兩行

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

#rpm2cpio命令用於將rpm軟件包轉換爲cpio格式的文件
cpio命令主要是用來建立或者還原備份檔的工具程序,cpio命令可以複製文件到歸檔包中,或者從歸檔包中複製文件。          
-i   還原備份檔  
-v  詳細顯示指令的執行過程

 

 

 

    K8S的搭建工作還是挺繁瑣的,如果您需要經常搭建,可以將其封裝成腳本,提高效率。下一節,我們將學習搭建配置k8s的儀表板dashboard並學習一些基本命令,感興趣的朋友,可以繼續更進,在此小編祝大家生活愉快。有技術交流的朋友請加微信:laughing_jk。

                                                                                                                                                           ~~您身邊喜歡綠色的朋友

                                                                                                                                                             帥吉帥哥(Spring)

 

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