机器信息
vpc ip | 公网 ip | 密码 | |
---|---|---|---|
k8s-node-01 | 192.168.1.114 | xxx.xxx.xxx | xxx |
k8s-node-02 | 192.168.1.115 | xxx.xxx.xxx | xxx |
k8s-node-03 | 192.168.1.116 | xxx.xxx.xxx | xxx |
所有节点环境准备
1. 系统环境
-
关闭防火墙
# 关闭防火墙 systemctl disable firewalld && systemctl stop firewalld
-
安装必要组件包,方便下载和调试等(官网非必须)
yum install -y wget vim net-tools ntpdate
-
关闭网络组件(官网非必须)
systemctl stop NetworkManager && systemctl disable NetworkManager
-
关闭 SELinux
setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
-
关闭 swap
swapoff -a && sed -i 's/.*swap.*/#$/' /etc/fstab
-
时钟同步(官网非必须)
# 注意,下面的 10.100.60.6 需要替换成本机 ip 地址(hostname -i) echo '*/10 * * * * /usr/sbin/ntpdate -s 10.100.60.6 >/dev/null 2>&1 && /sbin/clock -w' > /var/spool/cron/root service crond restart ntpdate -s $(hostname -i)
-
互相解析(官网非必须)
cat >> /etc/hosts << EOF 192.168.1.114 master 192.168.1.115 node01 192.168.1.116 node02 EOF
-
master 节点对 node 节点 ssh 互信(官网非必须)
# 生成本机 ssh key,一路按 Enter 键即可 ssh-keygen # 这一步要在第 7 步执行的基础上,不然无法识别 node01;需要输入 node01 密码 ssh-copy-id node01 # 这一步要在第 7 步执行的基础上,不然无法识别 node01;需要输入 node02 密码 ssh-copy-id node02
-
配置网络转发参数
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF # 让配置生效 sysctl --system
-
配置 Docker yum 源
cat >> /etc/yum.repos.d/docker.repo <<EOF [docker-repo] name=Docker Repository babseurl=http://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7 enabled=1 gpgcheck=0 EOF
-
配置 kubernetes yum 源
cat >> /etc/yum.repos.d/kubernetes.repo <<EOF [kebernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 EOF
-
更新 yum 源缓存
# 清空 yum 源缓存 yum clean all # 重新建立 yum 源缓存 yum makecache
2. 安装 Docker
yum install -y docker --disableexcludes=docker-repo && systemctl enable docker && systemctl start docker
3. 安装 k8s 组件
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes && systemctl enable kubelet && systemctl start kubelet
master 节点安装 control-plane
# 如果下面指令无法正确执行,可以将 $(kubectl version | base64 | tr -d '\n') 替换成 kubectl version 查询后获得的 v1.17.0 等值
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=$(kubectl version | base64 | tr -d '\n')
等待安装结束后,会出现类似如下日志信息:
Your Kubernetes control-plane has initialized successful!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod newwork to the cluser.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --diccovery-token-ca-cert-hash sha256:<hash>
如果是 root
用户,直接执行如下命令:
export KUBECONFIG=/etc/kubernetes/admin.conf
将上述日志中 kubeadm join ...
的命令记录下来,后面将 node 加入到 k8s 集群时需要用到
master 节点安装 pod 通信网络组件
如果不方便访问 github raw 直链资源,可以安装不使用 github raw 直链资源的 weave
插件:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
node 节点加入集群
执行完所有节点环境准备所需的指令后,直接执行前面 master 节点安装 control-plane 时,我们记下的 kubeadm join ...
命令即可,如:
kubeadm join 192.168.1.114:6443 --token itew1n.y3dzxgdthmps3187 --diccovery-token-ca-cert-hash sha256:8697769c7159f9d4c5fa66796aa377a1559b2ed4d808d41c1d5ebebfd3c6b023
查看 k8s 集群状态
# 查看当前运行的系统及 pod 的状态
kubectl get pod -n kube-system
# 查看当前 k8s 集群中,各节点的状态
kubectl get nodes