安装环境
主机名称 | 主机地址 | 操作系统 | 硬件空间 |
master | 192.168.170 | Centos 7.4 | 8C16G |
node1 | 192.168.171 | Centos 7.4 | 8C16G |
node2 | 192.168.172 | Centos 7.4 | 8C16G |
安装步骤
PS:三台节点都要执行下面的基本操作
联网
所有机器都需要联网操作
更改hosts本地解析
echo "192.168.10.170 master" >> /etc/hosts
系统基本设置
rpm -qa | grep "firewall" | xargs rpm -e --nodeps rpm -qa | grep "iptables" | xargs rpm -e --nodeps sed -i 's/.*UseDNS.*/UseDNS no/' /etc/ssh/sshd_config sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
安装docker
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine yum install -y yum-utils device-mapper-persistent-data lvm2 yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io systemctl enable docker systemctl start docker
安装nfs-utils
PS:必须先安装nfs才能挂载网络存储
yum install -y nfs-utils
关闭swap
swapoff -a yes | cp /etc/fstab /etc/fstab_bak cat /etc/fstab_bak |grep -v swap > /etc/fstab
修改sysctl
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf sysctl -p
配置Kubernetes源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
安装Kubernetes
yum install -y kubelet-1.15.3 kubeadm-1.15.3 kubectl-1.15.3 sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service # 设置 docker 镜像,提高 docker 镜像下载速度和稳定性 # 如果您访问 https://hub.docker.io 速度非常稳定,亦可以跳过这个步骤 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io systemctl daemon-reload systemctl restart docker systemctl enable kubelet
PS:这里不要直接启动kubelet,没有初始化集群是无法启动kubelet的。
初始化master节点
PS:这个操作只在master上面操作!
# 只在 master 节点执行 # 替换 192.168.10.170 为 master 节点实际 IP(请使用内网 IP) # 替换 master 为 您想要的 dnsName(我这里用的也是master) # 我当前的所有操作在/opt/kconfig目录下操作的。 mkdir -p /opt/kconfig cd /opt/kconfig/ rm -f ./kubeadm-config.yaml cat <<EOF > ./kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration kubernetesVersion: v1.15.3 imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers controlPlaneEndpoint: "master:6443" networking: serviceSubnet: "10.96.0.0/12" podSubnet: "10.100.0.1/20" dnsDomain: "cluster.local" EOF # 根据您服务器网速的情况,您需要等候 3 - 10 分钟 kubeadm init --config=kubeadm-config.yaml --upload-certs # 配置 kubectl rm -rf /root/.kube/ mkdir /root/.kube/ cp -i /etc/kubernetes/admin.conf /root/.kube/config # 安装 calico 网络插件 # 参考文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/ rm -f calico.yaml wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml sed -i "s#192.168.0.0/16#10.100.0.1/20#" calico.yaml kubectl apply -f calico.yaml # 检查 master 初始化结果 # 只在 master 节点执行 # 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态 watch kubectl get pod -n kube-system -o wide # 查看 master 节点初始化结果 kubectl get nodes
加载node节点至集群
# 只在 master 节点执行 kubeadm token create --print-join-command # 可获取kubeadm join 命令及参数,如下所示 kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
PS:下面的所有操作皆在node节点上面执行,大致需要等待3-10分钟。
kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
PS:在master上面检查node状况
watch -n 0.5 'kubectl get nodes' # 输出结果如下所示: NAME STATUS ROLES AGE VERSION master Ready master 14m v1.15.3 node1 Ready <none> 4m57s v1.15.3 node2 Ready <none> 4m52s v1.15.3
至此,kubernetes集群安装完毕。后续还会推出源码安装。
移除node节点
正常情况下,您无需移除 worker 节点,如果添加到集群出错,您可以移除 worker 节点,再重新尝试添加
在准备移除的 node 节点上执行
kubeadm reset
在master节点上执行
kubectl delete node demo-worker-x-x # 将 demo-worker-x-x 替换为要移除的 node节点的名字 # node 节点的名字可以通过在节点master上执行 kubectl get nodes 命令获得
参考文档
https://kuboard.cn/install/install-k8s.html#%E7%A7%BB%E9%99%A4-worker-%E8%8A%82%E7%82%B9