几个关键点:

  1. 把k8s部署需要的镜像从mirrorgooglecontainers下下来,并打上k8s.gcr.io的tag
  2. 注意部署网段,不要和宿主机的网段冲突
  3. 注意更改hostname,防止一些不合法的字符如下划线
echo "关闭docker 可能要花一点时间"systemctl stop dockerecho "关闭缓存"swapoff -a# 编辑/etf/fstabsed -e '/swap/ s/^#*/#/' -i /etc/fstabmount -a# 查看输出free -hecho "关闭防火墙"# 关闭防火墙systemctl disable firewalldsystemctl stop firewalldsystemctl status firewalldecho "关闭防火墙成功"sleep 1cat << EOF > /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl --systemsleep 1# 添加一条规则cat << EOF > /etc/sysctl.confnet.ipv4.ip_forward = 1EOF# 生效配置sysctl -p##################################### 安装docker# 前置需求#yum install -y  yum-utils device-mapper-persistent-data lvm2## Add docker repository.#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo## Install docker.#yum update && yum install docker-ce-17.06.0.ce-1.el7.centos## Create /etc/docker directory.#mkdir -p /etc/docker##cat > /etc/docker/daemon.json <<EOF#{#"log-driver":"json-file",#"log-opts":{"max-size":"1024m","max-file":"2"}#}#EOF##################################### 安装dockercat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF# 修改主机名, 主机名中不能含有下划线,否则会报错。hn=`hostname`# 将原来主机名中的下划线改为-new_hn="${hn//_/-}"hostnamectl set-hostname $new_hn#sed -i "s/$/ $new_hn/" /etc/hostssed -e  "s/$/ $new_hn/" -i  /etc/hosts# 启动docker服务echo "启动docker服务,可能花费较长时间"systemctl start docker.service# 从镜像拉去Image,并改tagdocker pull mirrorgooglecontainers/kube-apiserver:v1.14.2docker tag mirrorgooglecontainers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2  k8s.gcr.io/kube-controller-manager:v1.14.2docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2docker tag  mirrorgooglecontainers/kube-controller-manager:v1.14.2  k8s.gcr.io/kube-controller-manager:v1.14.2docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2docker tag mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2docker pull mirrorgooglecontainers/kube-proxy:v1.14.2docker tag mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2docker pull mirrorgooglecontainers/pause:3.1docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1docker pull mirrorgooglecontainers/etcd:3.3.10docker tag mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10docker pull coredns/coredns:1.3.1docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1# Set SELinux in permissive mode (effectively disabling it)setenforce 0sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configyum install -y kubelet kubeadm kubectl --disableexcludes=kubernetessystemctl enable kubelet && systemctl start kubelet#############################如果是master结点#######################################kubeadm init --pod-network-cidr=10.20.0.0/16 --apiserver-advertise-address=Your_host_address# 设置kubeconfig地址export KUBECONFIG=/etc/kubernetes/admin.conf# 设置rbackubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml# 下载calico.yamlcurl -O https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml# 修改calico.yaml# !!!!这里很关键,要把原来的CIDR换成一个和宿主机局域网不同的网段!!!!!#            - name: CALICO_IPV4POOL_CIDR#               value: "192.168.0.0/16"           ------------> 10.20.0.0/16# 安装网络组件kubectl apply -f calico.yaml#############################如果是worker节点#######################################kubeadm join 192.168.130.212:6443 --token 3csntd.vebwbj6pcy5nx6uw \    --discovery-token-ca-cert-hash sha256:XXXXX