Kubernetes/3.使用Kubeadm部署k8s集羣

使用Kubeadm部署k8s集羣

kubeadm是一個提供了"kubeadm init"和"kubeadm join"最佳實踐命令,且用於快速構建一個kubernetes集羣的工具,你能夠使用此工具快速構建一個kubernetes學習環境。
經過本章節的學習,你將可以使用kubeadm工具,成功構建出一個基礎的kubernetes集羣環境。node

  • 環境準備
  • Hosts文件準備
  • Docker環境配置
  • 其餘準備工做
  • 使用Kubeadm部署k8s集羣
  • 參考文檔
  • 備註

環境準備

ip 主機名 角色 操做系統
192.168.0.104 centos-1.shared master Master Centos6.4
192.168.0.108 centos-2.shared node01 Node Centos6.4
192.168.0.109 centos-3.shared node01 Node Centos6.4

Hosts文件準備

192.168.0.104 centos-1.shared master
192.168.0.108 centos-2.shared node01
192.168.0.109 centos-3.shared node02

Docker環境配置

1) 關閉系統默認防火牆和SELINUXlinux

setenforce 0
sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
which systemctl && systemctl stop firewalld
which systemctl && systemctl disable firewalld
which systemctl && systemctl stop iptables || service iptables stop
which systemctl && systemctl disable iptables || chkconfig iptables off

2) 卸載舊版本Dockergit

yum remove docker \
            docker-client \
            docker-client-latest \
            docker-common \
            docker-latest \
            docker-latest-logrotate \
            docker-logrotate \
            docker-selinux \
            docker-engine-selinux \
            docker-engine \
            docker \
            docker-ce \
            docker-ee

3) 安裝DockerCEgithub

# 1.安裝所需的包
# yum-utils 提供了 yum-config-manager 實用程
# 而且 devicemapper 存儲驅動須要 device-mapper-persistent-data 和 lvm2
yum install -y yum-utils device-mapper-persistent-data lvm2

# 2.更新xfsprogs
yum update xfsprogs

# 3.使用如下命令設置源
#官方源
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

#阿里源(建議使用)
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4.安裝Docker CE
yum install -y docker-ce    

# 4.或者安裝指定版本
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-17.12.1.ce-1.el7.centos

4) 啓動Docker並設置開機運行docker

systemctl start docker
systemctl enable docker
systemctl status docker

5) 常見問題vim

WARINING提示:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

#解決方案   
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system

其餘準備工做

1) 關閉防火牆centos

systemctl stop firewalld.service
systemctl stop iptables.service
systemctl disable firewalld.service
systemctl disable iptables.service

2) 禁用SELINUXbash

#臨時關閉:
setenforce 0            

#永久關閉:
vim /etc/selinux/config
SELINUX=disabled

3) 禁用swap設備(影響性能,k8s集羣初始化會報錯)app

#臨時禁用
swapoff  -a

#永久禁用
Vim  /etc/fstab 
註釋 /dev/mapper/VolGroup-lv_swap swap 所在的行

4) 啓用ipvs內核模塊 建立內核模塊載入相關的腳本文件/etc/sysconfig/modules/ipvs.modules,設定自動載入的內核模塊。文件內容以下(用到再配置也能夠)ide

#!/bin/bash
ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for i in $(ls $ipvs_mods_dir | grep -o "^[^.]*"); do
    /sbin/modinfo -F filename $i  &> /dev/null
    if [ $? -eq 0 ]; then
        /sbin/modprobe $i
    fi
done

# 賦權、運行並檢查    
chmod +x /etc/sysconfig/modules/ipvs.modules
/etc/sysconfig/modules/ipvs.modules
lsmod |grep ip_vs

5) docker文件配置(docker unit file: /usr/lib/systemd/system/docker.service)

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStartPost=/usr/sbin/iptables -P FPRWARD ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSe=0
RestartSec=2
Restart=always

systemctl daemon-reload
systemctl restart docker

#變量查看
docker info

使用Kubeadm部署k8s集羣

1) 首先安裝k8s相關軟件包。
阿里雲鏡像倉庫配置以下所示:

cd /etc/yum.repos.d/
vi k8s.repo

[kubernetes]
name=Kubernetes Repository
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

2) 倉庫載入狀況檢查

yum repolist

[root@centos-1 yum.repos.d]# yum list all |grep "^kube"
kubeadm.x86_64                              1.16.3-0                   kubernetes
kubectl.x86_64                              1.16.3-0                   kubernetes
kubelet.x86_64                              1.16.3-0                   kubernetes
kubernetes.x86_64                           1.5.2-0.7.git269f928.el7   extras   
kubernetes-client.x86_64                    1.5.2-0.7.git269f928.el7   extras   
kubernetes-cni.x86_64                       0.7.5-0                    kubernetes
kubernetes-master.x86_64                    1.5.2-0.7.git269f928.el7   extras   
kubernetes-node.x86_64                      1.5.2-0.7.git269f928.el7   extras

3) 使用yum安裝kubeadm 、kubectl和kubelet

yum install kubeadm  kubectl kubelet

4) 檢查相關軟件包是否完整

[root@centos-1 yum.repos.d]# rpm -ql kubelet
/etc/kubernetes/manifests
/etc/sysconfig/kubelet
/usr/bin/kubelet
/usr/lib/systemd/system/kubelet.service

5) 配置kubelet,swap處於啓用狀態時,不要報錯(若是上面配置了關閉swap,可省略)

vim /etc/sysconfig/kubelet
     KUBELET_EXTRA_ARG="--fail-swap-on=false」

6) 初始化集羣(Master節點)

#集羣鏡像獲取
https://www.jianshu.com/p/8bc61078bded

kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
kubeadm config images pull

#方式一:命令行(--dry-run:試運行,不會有改動)
kubeadm init --kubernetes-version=v1.16.0 --pod-network-cidr="10.244.0.0/16"  --dry-run

#方式二:Yml配置文件,使用—config string

#集羣初始化完畢後,建立用戶(最好用普通帳號建立):
mkdir -p $HOME/.kube

#切換至Root用戶操做:
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config(主配置文件,相當重要,不能泄露)
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#集成flannel插件,並觀察
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#Pod狀況查看:
kubectl get pods -n kube-system

#集羣初始化完畢
kubectl get nodes

7) Node節點

  • 從主節點複製repo配置到對應node節點上:
    scp k8s.repo node01:/etc/yum.repos.d/
    scp /etc/sysconfig/kubelet  node01:/etc/sysconfig
    scp k8s.repo node02:/etc/yum.repos.d/
    scp /etc/sysconfig/kubelet  node02:/etc/sysconfig
    scp  /run/flannel/subnet.env node01: /run/flannel/subnet.env
    scp  /run/flannel/subnet.env node02: /run/flannel/subnet.env

8) 在主節點打包node所需鏡像,並scp到各node節點

docker save -o k8s-node.tar k8s.gcr.io/coredns quay.io/coreos/flannel k8s.gcr.io/pause
scp k8s-node.tar node01:/
scp k8s-node.tar node02:/

9) Node節點:

  • 加載鏡像( coredns、 flannel、 pause):
    cd / && docker load —input k8s-node.tar
    yum install kubelet kubeadm
  • 添加集羣。注意這個token是第六步初始化集羣給你的,用於node節點加入節點時候用的。
    kubeadm join 192.168.0.104:6443 --token z9kmma.p8ak2ffytr7gjnsv \
    --discovery-token-ca-cert-hash sha256:82ee3a673e99fa8f46a8f515fa430819b595d532f3fcb21d9c3114f3394b4b0d

10) 部署完畢,並檢查集羣狀態(Master),此時一個基礎的kubernetes集羣已經構建完成了。

kubectl get nodes
NAME              STATUS   ROLES    AGE   VERSION    
centos-1.shared   Ready    master   41m   v1.16.3
centos-2.shared   Ready    <none>   19m   v1.16.3
centos-3.shared   Ready    <none>   18m   v1.16.3

參考文檔

官方文檔:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

備註

本文原址位於個人Github,我會陸續將全部專題更新過來,其中包括docker、k8s、ceph、istio和prometheus,旨在分享雲原生中大而全的技術知識點和實操過程,若是對你有用,請follow、star個人github,這也是我更新、分享下去的動力,謝謝~

相關文章
相關標籤/搜索