組件 Kubernetes 1.14.2 Docker 18.09.6-ce Etcd 3.3.13 Flanneld 0.11.0 基礎環境設置 192.168.11.188 k8s-master 192.168.11.189 k8s-node1192.168.11.190 k8s-node2 設 ...
組件
Kubernetes 1.14.2
Docker 18.09.6-ce
Etcd 3.3.13
Flanneld 0.11.0
基礎環境設置
192.168.11.188 k8s-master
192.168.11.189 k8s-node1
192.168.11.190 k8s-node2
設置主機名:
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
在master主機添加host
cat >> /etc/hosts <<EOF
192.168.11.188 k8s-master
192.168.11.189 k8s-node1
192.168.11.190 k8s-node2
EOF
免密登錄
ssh-keygen -t rsa
ssh-copy-id root@k8s-node1
ssh-copy-id root@k8s-node2
在所有環境中安裝依賴包
yum install -y epel-release conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget unzip net-tools
## epel-release 自動配置yum的軟體倉庫
## conntrack 允許系統管理員從用戶空間與內核中的連接跟蹤系統進行交互,該系統是為iptables啟用狀態包檢測的模塊。
## ntpdate 同步更新時間
## ntp 網路時間協議
## ipvsadm 工作在用戶空間,負責為ipvs內核框架編寫規則,定義誰是集群服務
## ipset ipset是iptables的擴展,它允許你創建 匹配整個地址集合的規則。
## jq 直接在命令行下對JSON進行操作,包括分片、過濾、轉換等
## iptables 管理防火牆安全框架的命令行工具
##curl 利用URL語法在命令行下工作的文件傳輸工具
## sysstat 提供Linux性能監控的工具集,包括sar、sadf、mpstat、iostat、pidstat等,監控系統性能和使用情況。
## libseccomp ibseccomp庫為Linux內核的系統調用過濾機制提供了一個易於使用,獨立於平臺的介面:seccomp。
## wget 下載工具
## unzip 解壓工具
## net-tools netstat命令不可用時,安裝net-tools
關閉防火牆
systemctl stop firewalld #臨時關閉
systemctl disable firewalld #永久關閉
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
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
載入內核並優化
modprobe ip_vs_rr
modprobe br_netfilter
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
vm.swappiness=0 # 禁止使用 swap 空間,只有當系統 OOM 時才允許使用它
vm.overcommit_memory=1 # 不檢查物理記憶體是否夠用
vm.panic_on_oom=0 # 開啟 OOM
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
ntp
ntpdate ntp1.aliyun.com #同步阿裡雲時間
創建相關目錄
mkdir -p /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert
升級內核
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
設置配置參數腳本
這裡的腳本為了之後配置文件、簽key使用
#!/usr/bin/bash
# 生成 EncryptionConfig 所需的加密 key
export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
# 集群各機器 IP 數組
export NODE_IPS=(192.168.11.188 192.168.11.189 192.168.11.190)
# 集群各 IP 對應的主機名數組
export NODE_NAMES=(k8s-master k8s-node1 k8s-node2)
# etcd 集群服務地址列表
export ETCD_ENDPOINTS="https://192.168.11.188:2379"
# etcd 集群間通信的 IP 和埠
export ETCD_NODES="k8s-master=https://192.168.11.188:2380"
# kube-apiserver 的反向代理(kube-nginx)地址埠
export KUBE_APISERVER="https://127.0.0.1:8443"
# 節點間互聯網路介面名稱
export IFACE="ens33"
# 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 數據目錄
export DOCKER_DIR="/data/k8s/docker"
## 以下參數一般不需要修改
# TLS Bootstrapping 使用的 Token,可以使用命令 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成
BOOTSTRAP_TOKEN="4498a43c27ef382031e642587615ee63"
# 最好使用 當前未用的網段 來定義服務網段和 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"
# flanneld 網路配置首碼
export FLANNEL_ETCD_PREFIX="/kubernetes/network"
# 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
將文件發送到所有節點
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