kubeadm是一個提供了"kubeadm init"和"kubeadm join"最佳實踐命令,且用於快速構建一個kubernetes集羣的工具,你能夠使用此工具快速構建一個kubernetes學習環境。
經過本章節的學習,你將可以使用kubeadm工具,成功構建出一個基礎的kubernetes集羣環境。node
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 |
192.168.0.104 centos-1.shared master 192.168.0.108 centos-2.shared node01 192.168.0.109 centos-3.shared node02
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
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節點
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節點:
cd / && docker load —input k8s-node.tar yum install kubelet kubeadm
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,這也是我更新、分享下去的動力,謝謝~