若是沒有特殊說明,須要在全部節點上執行初始化操做。node
本次部署採用三個節點,混合部署 etcd、master 集羣和 worker 集羣。
三臺機器操做系統爲 Centos7.6,單網卡。linux
設置主機名nginx
# 使用 zhaoyixin-k8s-01 做爲當前的主機名 hostnamectl set-hostname zhaoyixin-k8s-01
在每臺機器的/etc/hosts
文件中添加本地DNS解析:git
cat >> /etc/hosts <<EOF 192.168.16.8 zhaoyixin-k8s-01 192.168.16.10 zhaoyixin-k8s-02 192.168.16.6 zhaoyixin-k8s-03 EOF
退出並從新登陸 root 帳號,能夠看到主機名已更改。github
添加節點信任,只需在 zhaoyixin-k8s-01 節點上進行,設置 root 帳戶能夠無密碼登陸全部結點:docker
ssh-keygen -t rsa ssh-copy-id root@zhaoyixin-k8s-01 ssh-copy-id root@zhaoyixin-k8s-02 ssh-copy-id root@zhaoyixin-k8s-03
更新 PATH 變量api
echo 'PATH=/opt/k8s/bin:$PATH' >>/root/.bashrc source /root/.bashrc
/opt/k8s/bin
目錄用來保存下載安裝的程序。數組
yum install -y epel-release yum install -y chrony conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget socat git
systemctl stop postfix && systemctl disable postfix
關閉防火牆,清理防火牆規則,設置默認轉發策略:bash
systemctl stop firewalld systemctl disable firewalld iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat iptables -P FORWARD ACCEPT
關閉 swap 分區,不然kubelet 會啓動失敗(能夠設置 kubelet 啓動參數 --fail-swap-on 爲false 關閉 swap 檢查):網絡
swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
關閉 SELinux,不然 kubelet 掛載目錄時可能報錯 Permission denied
:
setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
cat > kubernetes.conf <<EOF net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 net.ipv4.ip_forward=1 net.ipv4.tcp_tw_recycle=0 net.ipv4.neigh.default.gc_thresh1=1024 net.ipv4.neigh.default.gc_thresh1=2048 net.ipv4.neigh.default.gc_thresh1=4096 vm.swappiness=0 vm.overcommit_memory=1 vm.panic_on_oom=0 fs.inotify.max_user_instances=8192 fs.inotify.max_user_watches=1048576 fs.file-max=52706963 fs.nr_open=52706963 net.ipv6.conf.all.disable_ipv6=1 net.netfilter.nf_conntrack_max=2310720 EOF cp kubernetes.conf /etc/sysctl.d/kubernetes.conf sysctl -p /etc/sysctl.d/kubernetes.conf
關閉 tcp_tw_recycle,不然與 NAT 衝突,可能致使服務不通;
設置系統時區
timedatectl set-timezone Asia/Shanghai
設置系統時鐘同步
systemctl enable chronyd systemctl start chronyd
查看同步狀態
timedatectl status # 輸出 System clock synchronized: yes NTP service: active RTC in local TZ: no
System clock synchronized: yes
,表示時鐘已同步;NTP service: active
,表示開啓了時鐘同步服務。將當前的 UTC 時間寫入硬件時鐘,並重啓依賴系統時間的服務
timedatectl set-local-rtc 0 systemctl restart rsyslog systemctl restart crond
建立目錄
mkdir -p /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert
後續使用的環境變量都定義在文件 environment.sh 中(能夠在文章最後查看文件內容),請根據本身的機器、網絡狀況修改。而後拷貝到全部節點:
source environment.sh # 先修改腳本文件 for node_ip in ${NODE_IPS[@]} do echo ">>> ${node_ip}" scp environment.sh root@${node_ip}:/opt/k8s/bin/ ssh root@${node_ip} "chmod +x /opt/k8s/bin/*" done
CentOS 7.x 系統自帶的 3.10.x 內核存在一些 Bugs,致使運行的 Docker、Kubernetes 不穩定,如今將內核升級到 4.4.X 以上。
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm # 安裝完成後檢查 /boot/grub2/grub.cfg 中對應內核 menuentry 中是否包含 initrd16 配置,若是沒有,再安裝一次! yum --enablerepo=elrepo-kernel install -y kernel-lt # 設置開機重新內核啓動 grub2-set-default 0
重啓機器:
sync reboot uname -r # 查看內核是否升級成功
opsnull/follow-me-install-kubernetes-cluster
environment.sh
#!/usr/bin/bash # 生成 EncryptionConfig 所需的加密 key export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64) # 集羣各機器 IP 數組 export NODE_IPS=(192.168.16.8 192.168.16.10 192.168.16.6) # 集羣各 IP 對應的主機名數組 export NODE_NAMES=(zhaoyixin-k8s-01 zhaoyixin-k8s-02 zhaoyixin-k8s-03) # etcd 集羣服務地址列表 export ETCD_ENDPOINTS="https://192.168.16.8:2379,https://192.168.16.10:2379,https://192.168.16.6:2379" # etcd 集羣間通訊的 IP 和端口 export ETCD_NODES="zhaoyixin-k8s-01=https://192.168.16.8:2380,zhaoyixin-k8s-02=https://192.168.16.10:2380,zhaoyixin-k8s-03=https://192.168.16.6:2380" # kube-apiserver 的反向代理(kube-nginx)地址端口 export KUBE_APISERVER="https://127.0.0.1:8443" # 節點間互聯網絡接口名稱 export IFACE="eth0" # etcd 數據目錄 export ETCD_DATA_DIR="/data/k8s/etcd/data" # etcd WAL 目錄,建議是 SSD 磁盤分區,或者和 ETCD_DATA_DIR 不一樣的磁盤分區 export ETCD_WAL_DIR="/data/k8s/etcd/wal" # k8s 各組件數據目錄 export K8S_DIR="/data/k8s/k8s" ## DOCKER_DIR 和 CONTAINERD_DIR 二選一 # docker 數據目錄 export DOCKER_DIR="/data/k8s/docker" # containerd 數據目錄 export CONTAINERD_DIR="/data/k8s/containerd" ## 如下參數通常不須要修改 # TLS Bootstrapping 使用的 Token,可使用命令 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成 BOOTSTRAP_TOKEN="41f7e4ba8b7be874fcff18bf5cf41a7c" # 最好使用 當前未用的網段 來定義服務網段和 Pod 網段 # 服務網段,部署前路由不可達,部署後集羣內路由可達(kube-proxy 保證) SERVICE_CIDR="10.254.0.0/16" # Pod 網段,建議 /16 段地址,部署前路由不可達,部署後集羣內路由可達(flanneld 保證) CLUSTER_CIDR="172.30.0.0/16" # 服務端口範圍 (NodePort Range) export NODE_PORT_RANGE="30000-32767" # kubernetes 服務 IP (通常是 SERVICE_CIDR 中第一個IP) export CLUSTER_KUBERNETES_SVC_IP="10.254.0.1" # 集羣 DNS 服務 IP (從 SERVICE_CIDR 中預分配) export CLUSTER_DNS_SVC_IP="10.254.0.2" # 集羣 DNS 域名(末尾不帶點號) export CLUSTER_DNS_DOMAIN="cluster.local" # 將二進制目錄 /opt/k8s/bin 加到 PATH 中 export PATH=/opt/k8s/bin:$PATH