K8S cluster deployment - qingchensecai/documents GitHub Wiki

centos/redhat服务器组

192.168.2.2 master 192.168.2.3 node01 192.168.2.4 node02 192.168.2.5 node03

  • 以下在所有节点进行操作
  • 设置服务器主机名和节点名称相同
  1. 设置免密登录 [Master] [root@k8s-master ~]# ssh-keygen [root@k8s-master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub node01 [root@k8s-master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub node02 [root@k8s-master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub node03
  2. 禁用防火墙 systemctl disable firewalld systemctl stop firewalld
  3. 禁用 seliux vim /etc/selinux/config SELINUX=disabled
  4. 关闭 swap
  • 临时关闭 swap 分区, 重启失效; swapoff -a #(2) 永久关闭 swap 分区 sed -ri 's/.*swap.*/#&/' /etc/fstab
  1. 开启路由转发 vim /etc/sysctl.d/k8s.conf 添加下面命令 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1
  • 立即生效: modprobe br_netfilter && sysctl -p /etc/sysctl.d/k8s.conf
  1. 配置 yum 国内源 mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo yum clean all && yum makecache
  2. 配置 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
  3. 配置 docker 源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
  4. 安装 docker yum install -y docker-ce systemctl enable docker && systemctl start docker docker –version docker 服务为容器运行提供计算资源,是所有容器运行的基本平台
  • 配置 iptables 规则(必须) vim /usr/lib/systemd/system/docker.service ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT systemctl daemon-reload && systemctl restart docker
  1. 修改 docker cgroup driver 为 systemd 根据文档 CRI installation 中的内容,对于使用 systemd 作为 init system 的 Linux 的发行版,使用 systemd 作为 docker 的 cgroup driver 可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改主节点上 docker 的 cgroup driver 为 systemd。 master: cat << EOF >/etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://4zh07w6q.mirror.aliyuncs.com"] } EOF
  • 重启 docker: systemctl restart docker
  1. 安装 kubeadm、kubelet、kubectl yum -y install kubeadm-1.14.2 kubelet-1.14.2 kubectl-1.14.2 systemctl enable kubelet kubeadm config images list kubeadm config images pull
  2. 在 master 上初始化 kubeadm init --kubernetes-version=1.14.2 \ #kubernetes 版本,必须和安装版本一致 --apiserver-advertise-address=masterIP \ #master 主机 IP --image-repository registry.aliyuncs.com/google_containers \ #仓库镜像地址 --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16 #flannel 网段 安装完成会出现:(在其他节点上运行) kubeadm join 10.10.10.10:6443 --token kekvgu.nw1n76h84f4camj6 \ --discovery-token-ca-cert-hash sha256:4ee74205227c78ca62f2d641635afa4d50e6634acfaa8291f28582c7e3b0e30e
  • 配置 kubectl 工具 mkdir -p /root/.kube cp /etc/kubernetes/admin.conf /root/.kube/config kubectl get nodes kubectl get cs
  1. 部署 flannel 网络 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  2. 查看节点状态 kubectl get nodes 等待 20 分钟左右
  3. 部署 Dashboard

注:在 master 节点上进行如下操作

  1. 创建 Dashboard 的 yaml 文件 wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml
  2. 部署 Dashboard kubectl create -f kubernetes-dashboard.yaml
  3. 创建完成后,检查相关服务运行状态 kubectl get deployment kubernetes-dashboard -n kube-system kubectl get pods -n kube-system -o wide kubectl get services -n kube-system netstat -ntlp|grep 30001
  4. 在 Firefox 浏览器输入 Dashboard 访问地址:https://10.10.10.10:30001
  5. 查看访问 Dashboard 的认证令牌 kubectl create serviceaccount dashboard-admin -n kube-system kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print }')
  6. 使用输出的 token 登录 Dashboard。
  • 查看 kubernetes 错误信息 journalctl -xefu kubelet
⚠️ **GitHub.com Fallback** ⚠️