聲明:
如果您有更好的技術與作者分享,或者商業合作;
請訪問作者個人網站 http://www.esqabc.com/view/message.html 留言給作者。
如果該案例觸犯您的專利,請在這裏:http://www.esqabc.com/view/message.html 留言給作者說明原由
作者一經查實,馬上刪除。
1、集羣服務器,使用相同地區,內網相同的ECS
3個master:
內網IP | 名稱 |
---|---|
172.26.16.249 | k8s-01 |
172.26.16.250 | k8s-02 |
172.26.16.251 | k8s-03 |
1個node:
內網IP | 名稱 |
---|---|
172.26.16.252 | k8s-04 |
1個後面添加的node(即新加入集羣的節點)
內網IP | 名稱 |
---|---|
172.26.16.253 | k8s-05 |
注意:後面一個node節點服務器可要可不要,當前搭建集羣不需要用到,後面步驟只是演戲怎麼加入當前集羣
如果沒有特別說明,一般都在(k8s-01)服務器執行
2 、設置服務器名稱與IP解析
1、更改服務器名稱:
[root@k8s-01~]# hostnamectl set-hostname k8s-01 && bash
[root@k8s-02~]# hostnamectl set-hostname k8s-02 && bash
[root@k8s-03~]# hostnamectl set-hostname k8s-03 && bash
[root@k8s-04~]# hostnamectl set-hostname k8s-04 && bash
.
注意:這個操作在單個服務器執行
.b、編輯 /etc/hosts 文件,添加IP解析
[root@test~]# cat >> /etc/hosts <<EOF
.
添加下面內容
172.26.16.249 k8s-01
172.26.16.250 k8s-02
172.26.16.251 k8s-03
172.26.16.252 k8s-04
EOF
注意:這個操作在所有服務器都執行一次
3 、設置(k8s-01)無密碼 ssh 登錄其它節點
a、生成簽名:
[root@k8s-01 ~]# ssh-keygen -t rsa -P “” -f /root/.ssh/id_rsa
或者
[root@k8s-01 ~]# ssh-keygen -t rsa
b、分發到各個服務器
方式1:
[root@k8s-01~]# ssh-copy-id root@k8s-01
。
[root@k8s-01~]# ssh-copy-id root@k8s-02
。
[root@k8s-01~]# ssh-copy-id root@k8s-03
。
[root@k8s-01~]# ssh-copy-id root@k8s-04
方式2:
[root@k8s-01~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.26.16.249
.
[root@k8s-01~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.26.16.250
.
[root@k8s-01~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.26.16.251
.
[root@k8s-01~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.26.16.252
.
4、設置集羣腳本文件(environment.sh)
a、創建集羣需要用到的目錄,所有服務器都執行一次
[root@test ~]# mkdir -p /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert
b、創建(environment.sh)並添加下面內容
[root@k8s-01~]# cd /opt/k8s/bin
.
[root@bin ~]# touch environment.sh
.
[root@bin ~]# vi environment.sh
#!/usr/bin/bash
# 生成 EncryptionConfig 所需的加密 key
export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)
# 集羣各機器 IP 數組
export NODE_IPS=( 172.26.16.249 172.26.16.250 172.26.16.251 172.26.16.252 )
# 集羣各 IP 對應的主機名數組
export NODE_NAMES=(k8s-01 k8s-02 k8s-03 k8s-04)
# 集羣MASTER機器 IP 數組
export MASTER_IPS=(172.26.16.249 172.26.16.250 172.26.16.251 )
# 集羣所有的master Ip對應的主機
export MASTER_NAMES=(k8s-01 k8s-02 k8s-03)
# etcd 集羣服務地址列表
export ETCD_ENDPOINTS="https://172.26.16.249:2379,https://172.26.16.250:2379,https://172.26.16.251:2379"
# etcd 集羣間通信的 IP 和端口
export ETCD_NODES="k8s-01=https://172.26.16.249:2380,k8s-02=https://172.26.16.250:2380,k8s-03=https://172.26.16.251:2380"
# etcd 集羣所有node ip
export ETCD_IPS=(172.26.16.249 172.26.16.250 172.26.16.251 172.26.16.252 )
# kube-apiserver 的反向代理(kube-nginx)地址端口
export KUBE_APISERVER="https://172.26.16.252: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 數據目錄
#export DOCKER_DIR="/data/k8s/docker"
## 以下參數不需要修改
# 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="1024-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
c、分發到其他服務器
cd /opt/k8s/bin && 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
5、初始化系統環境
a、更新系統所有軟件,所有服務器都執行一次
[root@test ~]# yum -y update
b、安裝需要用到的工具或者軟件,所有服務器都執行一次
[root@test ~]# yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget
c、確保時間統一
cd /opt/k8s/bin && source environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ntpdate -u ntp.api.bz
systemctl restart rsyslog && systemctl restart crond
done
d、設置國內的源,所有服務器都執行一次
[root@test ~]# mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
.
[root@test~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
.
[root@test~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
.
[root@test~]# yum clean all && yum makecache
e、關閉firewalld
cd /opt/k8s/bin && source environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
systemctl stop firewalld && systemctl disable firewalld
done
f、關閉swapoff
cd /opt/k8s/bin && source environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
done
g、設置iptables
cd /opt/k8s/bin && source environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT
done
h、添加到 PATH 變量,所有服務器都執行一次
[root@test ~]# echo ‘PATH=/opt/k8s/bin:$PATH’ >>/etc/profile
[root@test ~]# source /etc/profile
i、設置setenforce
cd /opt/k8s/bin && source environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
done
j、配置國內Kubernetes源,所有服務器都執行一次
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
添加下面內容:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
k、設置k8s內核參數,所有服務器都執行一次
[root@test ~]# cd /opt/k8s/bin
[root@test ~]# cat > /etc/sysctl.d/kubernetes.conf << EOF
添加下面內容:
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
net.ipv4.ip_local_port_range = 10000 65000
fs.file-max = 2000000
vm.swappiness =0
EOF
[root@test ~]# sysctl -p /etc/sysctl.d/kubernetes.conf
l、升級內核,所有服務器都執行一次
[root@test ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
[root@test ~]# yum --enablerepo=elrepo-kernel install -y kernel-lt
[root@test ~]# grep ‘initrd16’ /boot/grub2/grub.cfg
設置開機從新內核啓動
[root@test ~]# grub2-set-default 0
重啓機器
[root@test ~]# reboot
查看是否升級
[root@test ~]# uname -r
6、需要準備的安裝包或者工具
1、kubernetes二進制安裝文件
2、nginx
3、flanneld
4、etcd
5、kubectl
6、CoreDNS安裝包
7、coredns.yaml
》》》》》》》》》》》》》》》》》》》》》》》》》》
》》》》》》》》》》》》》》》》》》》》》》》》》》
Kubernetes(k8s)1.14.2搭建需要的工具或軟件
百度雲盤鏈接:https://pan.baidu.com/s/1t7vU_vimYJHeGCJqmVBdxQ
提取碼:v4ko
》》》》》》》》》》》》》》》》》》》》》》》》》》
》》》》》》》》》》》》》》》》》》》》》》》》》》
i4t.com網站的地址:
1、kubernetes二進制安裝文件:http://down.i4t.com/k8s1.14/kubernetes-server-linux-amd64.tar.gz
2、nginx:http://down.i4t.com/k8s1.14/nginx-1.15.3.tar.gz
3、flanneld:http://down.i4t.com/k8s1.14/flannel-v0.11.0-linux-amd64.tar.gz
4、etcd:https://github.com/etcd-io/etcd/releases/tag/v3.3.17
5、kubectl:http://down.i4t.com/k8s1.14/kubernetes-client-linux-amd64.tar.gz
6、CoreDNS安裝包:http://down.i4t.com/coredns_v1.4.tar
7、coredns.yaml:http://down.i4t.com/k8s1.14/coredns.yaml
》》》》》》》》》》》》》》》》》》》》》》》》》》
》》》》》》》》》》》》》》》》》》》》》》》》》》
官方的地址:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#downloads-for-v1142