1.配置信息
   
主机名 IP地址 推荐配置 
master 10.0.0.10 1C2G40G 
node1  10.0.0.11 1C2G40G 
node2  10.0.0.12 1C2G40G
    
    
    2.系统环境准备
   
    
    
    配置主机名
   
主机名 IP地址 
master 10.0.0.10 
node1  10.0.0.11 
node2  10.0.0.12
    
    
    配置host解析
   
cat >> /etc/hosts << EOF 
10.0.0.10 master 
10.0.0.11 node1 
10.0.0.12 node2 
EOF
    
    
    关闭防火墙
   
systemctl stop firewalld NetworkManager 
systemctl disable firewalld NetworkManager
    
    
    关闭SELinux
   
setenforce 0 
sed -i 's#SELINUX=disabled#SELINUX=disabled#g' /etc/selinux/config 
getenforce
    
    
    更新好阿里源
   
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 
sed -i '/aliyuncs/d' /etc/yum.repos.d/*.repo
    
    
    配置时间同步
   
yum install chrony -y 
systemctl start chronyd 
systemctl enable chronyd date
    
    
    关闭SWAP分区
   
swapoff -a 
sed -i '/swap/d' /etc/fstab 
free -h
    
    
    3.kubeadm部署前规划
   
    
    
    节点规划
   
master master节点 API Server,controlle,scheduler,kube-proxy,kubelet,etcd 
node1  node节点   Dokcer kubelet kube-proxy 
node2  node节点   Dokcer kubelet kube-proxy
    
    
    IP规划
   
POD IP     10.2.0.0 
Cluster IP 10.1.0.0 
Node IP    10.0.0.0
注意!!!以下步骤如果没有特别指出在某个节点运行则默认在所有节点都执行。
    
    
    4.kubeadm部署前系统环境准备
   
    
    
    设置k8s禁止使用swap
   
cat > /etc/sysconfig/kubelet<<EOF 
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" 
KUBELET_EXTRA_ARGS="--fail-swap-on=false" 
EOF
    
    
    设置内核参数
   
cat > /etc/sysctl.d/k8s.conf <<EOF 
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1 
EOF 
sysctl --system
    
    
    加载IPVS模块
   
cat >/etc/sysconfig/modules/ipvs.modules<<EOF 
#!/bin/bash 
modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack_ipv4 
EOF 
chmod +x /etc/sysconfig/modules/ipvs.modules 
source /etc/sysconfig/modules/ipvs.modules 
lsmod | grep -e ip_vs -e nf_conntrack_ipv
    
    
    5.安装配置Docker
   
    
    
    配置阿里源
   
cd /etc/yum.repos.d/ 
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum makecache fast
    
    
    安装指定版本的Docker
   
yum list docker-ce --showduplicates 
yum -y install docker-ce-19.03.15 docker-ce-cli-19.03.15
    
    
    配置docker镜像加速和cgroup驱动:
   
mkdir /etc/docker -p 
cat > /etc/docker/daemon.json <<EOF 
{ 
  "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"] 
}
EOF
    
    
    启动Docker并设置开机自启动
   
systemctl enable docker && systemctl start docker
    
    
    检查版本
   
docker -v
    
    
    6.设置kubeadm的国内yum仓库
   
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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
    
    
    7.安装kubeadm
   
yum list kubeadm --showduplicates 
yum install -y kubelet-1.19.3 kubeadm-1.19.3 kubectl-1.19.3 ipvsadm
    
    
    8.设置kubelet开机启动
   
systemctl enable kubelet
    
    
    9.初始化集群命令-只在master节点运行
   
kubeadm init \ 
--apiserver-advertise-address=10.0.0.10 \ 
--image-repository registry.aliyuncs.com/google_containers \ 
--kubernetes-version v1.19.3 \ 
--service-cidr=10.1.0.0/16 \ 
--pod-network-cidr=10.2.0.0/16 \ 
--service-dns-domain=cluster.local \ 
--ignore-preflight-errors=Swap \ 
--ignore-preflight-errors=NumCPU
    参数解释:
    
    –apiserver-advertise-address=10.0.0.11 #API Server的地址
    
    –image-repository registry.aliyuncs.com/google_containers #镜像仓库地址, 这里使用的是阿里云
    
    –kubernetes-version v1.19.3 #安装的k8s版本
    
    –service-cidr=10.1.0.0/16 #Cluster IP
    
    –pod-network-cidr=10.2.0.0/16 #Pod IP
    
    –service-dns-domain=cluster.local #全域名的后缀,默认是 cluster.local
    
    –ignore-preflight-errors=Swap #忽略SWAP检查不通过的警告
    
    –ignore-preflight-errors=NumCPU #忽略CPU检查不通过的警告
   
这个步骤需要几分钟时间,执行完成后会有输出,这是node节点加入k8s集群的命令,需要自己保存到文本里
kubeadm join 10.0.0.11:6443 --token fsteby.4pz9czptzvxhzrg2 \ 
     --discovery-token-ca-cert-hash 
sha256:8466da60f808479cf39c78fbbfc7c80b397ac95ed23164253abe05a9c8c619b4
    
    
    10.为kubectl准备kubeconfig
   
mkdir -p $HOME/.kube 
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    
    11.获取node节点信息
   
[root@node1 ~]# kubectl get nodes 
NAME STATUS ROLES AGE VERSION 
master NotReady master 15m v1.19.3
    
    
    12.设置kube-proxy使用ipvs模式
   
    k8s默认使用的是iptables防火墙,可以修改为性能更高的ipvs模式
    
    执行编辑命令,然后将mode:””修改为mode:”ipvs”然后保存退出
   
kubectl edit cm kube-proxy -n kube-system
重启kube-proxy
kubectl -n kube-system get pod|grep kube-proxy|awk '{print "kubectl -n kube- system delete pod "$1}'|bash
查看pod信息
kubectl get -n kube-system pod|grep "kube-proxy" 1
    
    
    14.部署Flannel网络插件-只在master节点上安装部署
   
git clone --depth 1 https://github.com/coreos/flannel.git
下载下来后还需要修改资源配置清单
#修改配置文件,将128行替换为PodIP,在189行新增加一行指定网卡名 
cd flannel/Documentation/ 
vim kube-flannel.yml 
128: "Network": "10.2.0.0/16", 
189: - --iface=eth0
应用资源配置清单
kubectl create -f kube-flannel.yml
检查pod运行状态,等一会应该全是running
[root@node1 ~]# kubectl -n kube-system get pod 
NAME READY STATUS RESTARTS AGE 
coredns-6d56c8448f-2w8gz 1/1 Running 0 12m 
coredns-6d56c8448f-6k7wf 1/1 Running 0 12m 
    
    
    15.node节点执行加入集群命令-所有的Node节点执行
   
刚才在master集群初始化的时候会生成一串命令,这个命令就是给node节点加入集群的指令。
kubeadm join 10.0.0.11:6443 --token uqf018.mia8v3i1zcai19sj --discovery- token-ca-cert-hash 
sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae
如果当时没有保存,可以执行以下命令重新查看:
kubeadm token create --print-join-command
查看节点状态-全部是Ready就是正常状态
kubectl get nodes
    
    
    19.支持命令补全
   
yum install bash-completion -y 
source /usr/share/bash-completion/bash_completion 
source <(kubectl completion bash) 
kubectl completion bash >/etc/bash_completion.d/kubectl