• 获取谷歌镜像
# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.3
# dockers aliyun images url: https://k851mren.mirror.aliyuncs.com/
# cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://k851mren.mirror.aliyuncs.com/"
  ]
}
EOF

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

关闭防火墙
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

准备阶段

  • 节点间时间同步
  • 关闭selinux
  • 关闭防火墙
  • 设置/etc/hosts手动解析

设置yum源

从阿里云安装 base、epel、docker、kubernetes
https://opsx.alibaba.com/mirror

# yum install -y kubelet kubeadm kubectl docker
# yum install -y kubelet-1.14.8 kubeadm-1.14.8 kubectl-1.14.8
# yum install -y kubelet-1.16.9 kubeadm-1.16.9 kubectl-1.16.9 
# systemctl enable kubelet && systemctl start kubelet

确保以下参数值为1

# rm -rf /etc/sysctl.d/k8s.conf

# 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
vm.swappiness=0
EOF

# sysctl --system

4. 在kernel中需要打开ipvs模块

/etc/sysconfig/kubelet
KUBE_PROXY_MODE=ipvs
- 加载 ip_vs 模块
    - ip_vs
    - ip_vs_rr
    - ip_vs_wrr
    - ip_vs_rrip_vs_wrr \
    - ip_vs_lblc \
    - ip_vs_lblcr \
    - ip_vs_dh \
    - ip_vs_sh \
    - ip_vs_fo \
    - ip_vs_nq \
    - ip_vs_sedip_vs_ftp \
    - nf_conntrack \
    - nf_conntrack_ipv4 \

5. 在kublet中禁用swap

1. /etc/sysconfig/kubelet
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"
2. swapoff -a
3. 在 /etc/fstab 中关闭swap
4. Enable cgroup driver /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

Environment=“KUBELET_CGROUP_ARGS=–cgroup-driver=systemd” cat > /etc/docker/daemon.json «EOF { “registry-mirrors”: [ “https://hub-mirror.c.163.com”, “http://hub-mirror.c.163.com”, “http://docker.mirrors.ustc.edu.cn”, “https://dockerhub.azk8s.cn” ], “insecure-registries”: [“harbor.ctfo.com:80”], “exec-opts”: [“native.cgroupdriver=systemd”], “log-driver”: “json-file”, “log-opts”: { “max-size”: “100m” }, “storage-driver”: “overlay2”, “storage-opts”: [ “overlay2.override_kernel_check=true” ] } EOF

  1. 一颗CPU –ignore-preflight-errors=NumCPU

  2. 初始化kubeadm

    1. kubeadm init –pod-network-cidr=10.244.0.0/16 –service-cidr=10.96.0.0/12 –ignore-preflight-errors=all
    2. kubeadm init –pod-network-cidr=10.244.0.0/16 –service-cidr=10.96.0.0/12 –ignore-preflight-errors=Swap –ignore-preflight-errors=NumCPU
      1. pod网络是 10.244.0.0/16
      2. service网络是 10.96.0.0/12
      3. node 网络是 192.168.1.0/24,其实就是虚机自身的网络。
      4. 下图是网络模型,与当前部署的网络不同。
  3. 提前下载镜像 kubeadm config images list

  4. Your Kubernetes control-plane has initialized successfully! 在master上执行,创建root初始化目录 [root@master ~]# mkdir -p $HOME/.kube [root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

  5. 在master节点上安装flannel https://github.com/coreos/flannel kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f kube-flannel.yml

  1. install calico 网络插件 kubectl apply -f https://raw.githubusercontent.com/luckylucky421/kubernetes1.17.3/master/calico.yaml

  2. install node1 software

    1. yum install -y docker-ce kubelet kubeadm
    2. 把所有docker images也下载上
    3. 关闭swap
  3. 相关命令 kubectl describe pod kube-flannel-ds-amd64-47jl8 –namespace=kube-system kubectl get all –all-namespaces kubectl get nodes kubectl get ns kubectl get cs kubectl get componentstatus

  • kubeadm
    • 在master、nodes节点上安装:kubelet、kubeadm、docker
    • master:初始化集群 kubeadm init
    • nodes:加入master集群 kubeadm join

备注: docker加速

https://www.daocloud.io/mirror curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1461db2.m.daocloud.io https://dashboard.daocloud.io/orgs/qikang/packages/explore qikang qk3322451 systemctl daemon-reload https://blog.51cto.com/ghbsunny/2162205 设置docker的代理网址 [root@master ~]# vim /usr/lib/systemd/system/docker.service [root@master ~]# grep -i env /usr/lib/systemd/system/docker.service Environment=“HTTPS_PROXY=http://www.ik8s.io:10080” Environment=“HTTP_PROXY=http://www.ik8s.io:10080” Environment=“NO_PROXY=127.0.0.0/8,172.20.0.0/16”

kube-apiserver:v1.14.1 kube-controller-manager:v1.14.1 kube-scheduler:v1.14.1 kube-proxy:v1.14.1 pause:3.1 etcd:3.3.10 coredns:1.3.1

设置docker [root@node1 ~]# cat /etc/docker/daemon.json {“registry-mirrors”: [“http://f1361db2.m.daocloud.io”]} [root@node1 ~]# grep -i env /usr/lib/systemd/system/docker.service Environment=“NO_PROXY=127.0.0.0/8,172.20.0.0/16” systemctl enable docker systemctl enable kubelet

下载镜像 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.14.2 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.14.2 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.2 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.2

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2 下载镜像脚本 for i in kubeadm config images list; do imageName=${i#k8s.gcr.io/} echo $imageName docker pull registry.aliyuncs.com/google_containers/$imageName docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.aliyuncs.com/google_containers/$imageName done;