=>返回首頁<=
一、實踐環境準備
1. 服務器說明
我們這裏使用的是五臺centos-7.6的虛擬機,具體信息如下表:
系統類型 | IP地址 | 節點角色 | CPU | Memory | Hostname |
---|---|---|---|---|---|
centos-7.6 | 172.19.3.171 | master | >=2 | >=2G | master1 |
centos-7.6 | 172.19.3.172 | master | >=2 | >=2G | master2 |
centos-7.6 | 172.19.3.173 | master | >=2 | >=2G | master3 |
centos-7.6 | 172.19.3.174 | worker | >=2 | >=2G | worker1 |
centos-7.6 | 172.19.3.175 | worker | >=2 | >=2G | worker2 |
2. 系統設置(所有節點)
2.1 主機名
主機名必須每個節點都不一樣,並且保證所有點之間可以通過hostname互相訪問。
# 查看主機名
$ hostname
# 修改主機名
$ hostnamectl set-hostname <your_hostname>
# 配置host,使所有節點之間可以通過hostname互相訪問
$ vi /etc/hosts
# <node-ip> <node-hostname>
2.2 安裝依賴包
# 更新yum
$ yum update
# 安裝依賴包
$ yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
2.3 關閉防火牆、swap,重置iptables
# 關閉防火牆
$ systemctl stop firewalld && systemctl disable firewalld
# 重置iptables
$ iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
# 關閉swap
$ swapoff -a
$ sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
# 關閉selinux
$ setenforce 0
# 關閉dnsmasq(否則可能導致docker容器無法解析域名)
$ service dnsmasq stop && systemctl disable dnsmasq
2.4 系統參數設置
# 製作配置文件
$ cat > /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
EOF
# 生效文件
$ sysctl -p /etc/sysctl.d/kubernetes.conf
#如提示
#sysctl cannot stat /proc/sys/net/bridge/bridge-nf-cal1-iptables: No such file or directory
#sysctl cannot stat /proc/sys/net/bridge/bridge-nf-cal1-ip6tables: No such file or directory
#可以編輯該文件,去掉報錯的兩行配置 vi /etc/sysctl.d/kubernetes.conf
#當做到‘搭建高可用集羣’,初始化kubeadm時,會報錯失敗,這時再返回這裏加上去掉的配置即可
3. 安裝docker(所有節點)
# yum 地址配置阿里雲
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝docker
$ sudo yum install docker
# 開機自啓動
$ systemctl enable docker
# 啓動docker服務
$ service docker restart
4. 安裝必要工具(所有節點)
4.1 工具說明
- kubeadm: 部署集羣用的命令
- kubelet: 在集羣中每臺機器上都要運行的組件,負責管理pod、容器的生命週期
- kubectl: 集羣管理工具(可選,只要在控制集羣的節點上安裝即可)
4.2 安裝方法
# 配置yum源(條件充足的同學可以把"mirrors.aliyun.com"替換爲"packages.cloud.google.com")
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安裝工具
# 找到要安裝的版本號
$ yum list kubeadm --showduplicates | sort -r
# 安裝指定版本(這裏用的是1.14.0)
$ yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0 --disableexcludes=kubernetes
# >>>>>可選 start<<<<<
# 設置kubelet的cgroupdriver(kubelet的cgroupdriver默認爲systemd,如果上面沒有設置docker的exec-opts爲systemd,這裏就需要將kubelet的設置爲cgroupfs)
# 由於各自的系統配置不同,配置位置和內容都不相同
# 1. /etc/systemd/system/kubelet.service.d/10-kubeadm.conf(如果此配置存在的情況執行下面命令:)
$ sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# >>>>>可選 end<<<<<
# 2. 如果1中的配置不存在,則此配置應該存在(不需要做任何操):/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# kubelet 設爲開機自啓動,並立即啓動
$ systemctl enable kubelet && systemctl start kubelet
5. 準備配置文件
# 創建存放配置文件的目錄
$ mkdir -p /etc/kubeadm/kubeadm-config.yaml
# 編輯該配置文件,寫入一下內容(ip記得變更爲自己的配置)
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.14.0
# 配置master1的ip地址即可
controlPlaneEndpoint: "172.19.3.171:6443"
networking:
# pod 的ip地址範圍
podSubnet: "172.19.3.254/24"
imageRepository: registry.cn-hangzhou.aliyuncs.com/imooc