1 主机名设置
```
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
```
2 设置hosts配置
```
cat >> /etc/hosts <<EOF
192.168.1.131 master
192.168.1.132 node1
192.168.1.133 node2
EOF
# 查看防火墙状态
firewall-cmd --state
# 查看防火墙开放的所有端口
firewall-cmd --zone=public --list-ports
# 开放端口命令
firewall-cmd --zone=public --add-port=5672/tcp --permanent
# 批量开放端口
firewall-cmd --permanent --zone=public --add-port=100-500/tcp
# 重新加载防火墙,配置完端口一定要执行重新加载才能生效
firewall-cmd --reload
```
3配置ssh密钥
```
# master节点执行
# 生成ssh密钥,直接一路回车
ssh-keygen -t rsa
# 复制刚刚生成的密钥到各节点可信列表中,需分别输入各主机密码
ssh-copy-id root@master ssh-copy-id root@node01
# 配置完成后使用下面命令查看是否可以登录到目标服务器
ssh 'root@master'
# 退出 exit
```
4 禁用swap分区
```
# 所有节点服务器执行
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
```
5 关闭SELinux
```
# 所有节点服务器执行 setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
```
6 设置时间同步
```
# 所有节点服务器执行
# 设置时区
timedatectl set-timezone Asia/Shanghai systemctl enable --now chronyd
# 验证设置是否成功
date
# 查看同步状态
timedatectl status
# 输出结果中显示下列属性证明时钟同步正常
System clock synchronized: yes NTP service: active
# 将当前的UTC时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog && systemctl restart crond
```
7 添加docker yum源
```
# 所有节点服务器执行
# 安装必要依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加aliyum docker-ce yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 重建yum缓存
yum makecache
```
8 安装docker
```
# 所有节点服务器执行
# 查看可用的docker版本 yum list docker-ce.x86_64 --showduplicates | sort -r
# 所有节点服务器执行
# 安装指定版本docker,这里以19.03.12为例说明
yum install -y docker-ce-19.03.12-3.el7
```
9 确保网络模块开机自动加载
```
# 所有节点服务器执行
lsmod | grep overlay
lsmod | grep br_netfilter
# 所有节点服务器执行
cat > /etc/modules-load.d/docker.conf <<EOF overlay br_netfilter EOF
modprobe overlay
modprobe br_netfilter
```
10 使桥接流量对iptables可见
```
# 所有节点服务器执行
cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
sysctl --system
# 验证是否生效,下面两个命令结果需均返回 1
sysctl -n net.bridge.bridge-nf-call-iptables
sysctl -n net.bridge.bridge-nf-call-ip6tables
```
11 配置docker
```
# 所有节点服务器执行
mkdir /etc/docker
# 修改cgroup驱动为systemd[k8s官方推荐]、限制容器日志量、修改存储类型,最后的docker根目录可修改 cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://docker.1panelproxy.com"]
}
EOF
# 添加开机自启动,立即启动
systemctl enable --now docker
```
12 验证docker是否正常
```
# 所有节点服务器均执行
# 查看docker信息,判断是否与配置一致
docker info
# hello-docker测试
docker run --rm hello-world
# 删除测试的image
docker rmi hello-world
```
13添加kubernetes源
```
# 所有节点服务器均执行
cat > /etc/yum.repos.d/kubernetes.repo <<EOF [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
# 重建yum缓存,输入y添加证书认证
yum makecache
```
14 安装kubeadm、kubelet、kubectl
```
# 所有节点服务器均执行 # 安装
yum install -y kubelet-1.18.5 kubeadm-1.18.5 kubectl-1.18.5 --disableexcludes=kubernetes
# 配置开机启动并立即启动kubelet
systemctl enable --now kubelet
```
15 配置自动补全命令
```
# 所有节点服务器均执行
# 安装bash自动补全插件
yum install bash-completion -y
# 设置kubectl与kubeadm命令补全,下次login生效
kubectl completion bash >/etc/bash_completion.d/kubectl
kubeadm completion bash > /etc/bash_completion.d/kubeadm
```
16 预拉取kubernetes镜像
```
# 所有节点服务器均执行
# 查看执行kubernetes版本需要哪些镜像
kubeadm config images list --kubernetes-version v1.18.5
# 结果如下
k8s.gcr.io/kube-apiserver:v1.18.5
k8s.gcr.io/kube-controller-manager:v1.18.5
k8s.gcr.io/kube-scheduler:v1.18.5
k8s.gcr.io/kube-proxy:v1.18.5 k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.7
```
17 在`/root/k8s`目录下新建脚本`get-k8s-images.sh`,命令如下:
```
# 所有节点服务器均执行
cd /root/
mkdir k8s
cd k8s/
# 创建脚本文件,文件内容如下一代码段所示
vi get-k8s-images.sh
#!/bin/bash
# Script For Quick Pull K8S Docker Images
# by Hellxz Zhang <hellxz001@foxmail.com>
KUBE_VERSION=v1.18.5
PAUSE_VERSION=3.2
CORE_DNS_VERSION=1.6.7
ETCD_VERSION=3.4.3-0
# pull kubernetes images from hub.docker.com
docker pull kubeimage/kube-proxy-amd64:$KUBE_VERSION
docker pull kubeimage/kube-controller-manager-amd64:$KUBE_VERSION
docker pull kubeimage/kube-apiserver-amd64:$KUBE_VERSION
docker pull kubeimage/kube-scheduler-amd64:$KUBE_VERSION
# pull aliyuncs mirror docker images
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION
# retag to k8s.gcr.io prefix
docker tag kubeimage/kube-proxy-amd64:$KUBE_VERSION k8s.gcr.io/kube-proxy:$KUBE_VERSION
docker tag kubeimage/kube-controller-manager-amd64:$KUBE_VERSION k8s.gcr.io/kube-controller-manager:$KUBE_VERSION
docker tag kubeimage/kube-apiserver-amd64:$KUBE_VERSION k8s.gcr.io/kube-apiserver:$KUBE_VERSION
docker tag kubeimage/kube-scheduler-amd64:$KUBE_VERSION k8s.gcr.io/kube-scheduler:$KUBE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION k8s.gcr.io/coredns:$CORE_DNS_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION
# untag origin tag, the images won't be delete.
docker rmi kubeimage/kube-proxy-amd64:$KUBE_VERSION
docker rmi kubeimage/kube-controller-manager-amd64:$KUBE_VERSION
docker rmi kubeimage/kube-apiserver-amd64:$KUBE_VERSION
docker rmi kubeimage/kube-scheduler-amd64:$KUBE_VERSION
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION
# 所有节点服务器均执行
# 添加脚本执行权限
chmod +x get-k8s-images.sh
# 执行脚本
./get-k8s-images.sh
```
17 初始化master节点
```
# master节点服务器执行
mkdir /var/lib/kubelet
cat > /var/lib/kubelet/config.yaml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF
然后初始化master
kubeadm init --apiserver-advertise-address=192.168.1.131 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.5 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all
并要保留最后一个toke
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
拷贝k8s的证书
```
18 下载网络互信
```
wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml
ll
kubectl apply -f calico.yaml
kubectl get pods -n kube-system
```
19 node节点加入master集群
```
node节点执行初始化的信息就可以了
```