k8s安装Master和Node

k8s及docker安装步骤见博客:CentOS7安装k8s及对应版本docker

一、准备镜像

执行下面的脚本(针对kubernetes-version=1.21.0):

images=(
  kube-apiserver:v1.21.0
  kube-proxy:v1.21.0
  kube-controller-manager:v1.21.0
  kube-scheduler:v1.21.0
  etcd:3.4.13-0
  pause:3.4.1
)

for imageName in ${images[@]} ; do
   docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

docker pull coredns/coredns:1.8.0
docker tag coredns/coredns:1.8.0 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
docker rmi coredns/coredns:1.8.0

再更改标签内容:

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver k8s.gcr.io/kube-apiserver:v1.21.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.0 k8s.gcr.io
<think>我们参考用户提供的引用资料,特别是引用[1][2][3][4],这些资料都是关于Kubernetes集群搭建的,其中引用[3][4]明确提到了单Master集群的搭建。用户要求搭建单masternode的集群,也就是一个Master节点(同时也是一个Node一个Worker节点(Node),但根据用户的要求,这里单node可能是指只有一个节点(既是Master也是Node),或者一个Master一个Node?但根据用户描述“单masternode”,通常是指一个Master节点一个Node节点(两个节点)。然而,在引用[3]中提到了一个Master两个Node,而引用[4]中也是单Master两个Node。但是用户明确要求单node,所以我们可以调整为两个节点:一个Master(同时也可以作为Node一个单独的Node?或者更简单的方法,我们可以搭建一个节点,这个节点既是Master也是Node(即单节点集群)。但是,在Kubernetes中,通常生产环境Master节点不承担工作负载,但学习环境可以。 根据引用[3][4]的说明,我们可以将集群节点数调整为两个:一个Master节点一个Node节点。但是,用户要求的是单masternode,我们理解为两个节点:一个Master节点(不运行工作负载)一个Node节点。但是,在最小化安装中,我们也可以让Master节点同时作为Node节点(即允许Master节点调度Pod),这样实际上我们只需要一个节点(单节点集群)?但用户要求是单masternode,这通常是指两个节点。 但是,注意用户要求:单masternode。我们理解为两个节点:一个master节点一个node节点。但是,在引用[4]中,我们看到有三个节点:一个master两个node。所以我们只需要减少一个node节点即可。 然而,引用[3][4]的教程都是基于三个节点的。因此,我们需要调整步骤,只使用两个节点(一个master,一个node)。 另外,引用[2]提到的是单master集群(没有说明节点数),我们可以参考。 由于用户明确要求单masternode,所以我们搭建两个节点:masternode。 步骤调整: 1. 准备两台CentOS7机器,分别命名为masternode(或者根据用户喜好命名),并完成基本配置(主机名、hosts解析、关闭防火墙、关闭swap等)。 2. 在master节点上执行初始化,然后让node节点加入集群。 但是,在初始化master节点的时候,我们需要允许master节点也作为工作节点(如果用户希望master节点也运行pod,默认情况下master节点是不调度pod的)。但用户要求是单masternode,通常node是指工作节点,所以master节点不应该承担工作负载。因此,我们只需要一个master节点一个node节点(两个节点),且master节点不调度pod(默认taint存在)。这样,我们有两个节点,但master节点只是控制平面,node节点是工作节点。 然而,用户要求的是单masternode,也就是两个节点,那么我们就可以按照两个节点来部署。 但是,在引用[3][4]中,都是三个节点(一个master两个node),我们可以借鉴步骤,去掉一个node节点即可。 因此,我们按照以下步骤: 1. 准备两台CentOS7机器(masternode),配置主机名、hosts解析、关闭防火墙、关闭swap、设置SELinux为permissive等。 2. 安装Docker(或者是其他容器运行时,但这里使用Docker)。 3. 安装kubeadm, kubelet, kubectl。 4. 在master节点上初始化集群。 5. 将node节点加入集群。 6. 安装网络插件(如flannel、calico等)。 注意:由于是单node,所以当node节点加入后,集群就有两个节点(一个master,一个node)。但是,master节点默认有污点,所以pod不会被调度到master节点,只有node节点会运行pod。 下面给出详细的步骤: 步骤1:准备工作(两台机器都要执行) - 设置主机名(master节点:hostnamectl set-hostname masternode节点:hostnamectl set-hostname node- 编辑/etc/hosts文件,添加两行(假设IP地址): <master节点的IP> master <node节点的IP> node - 关闭防火墙: systemctl stop firewalld systemctl disable firewalld - 关闭swap: swapoff -a # 临时关闭 sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久关闭 - 设置SELinux为permissive模式: setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config - 将桥接的IPv4流量传递到iptables的链: cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system 步骤2:安装Docker(两台机器都要执行) - 安装依赖: yum install -y yum-utils device-mapper-persistent-data lvm2 - 设置仓库: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo - 安装Docker: yum install -y docker-ce docker-ce-cli containerd.io - 启动Docker并设置开机自启: systemctl start docker systemctl enable docker 步骤3:安装kubeadm, kubelet, kubectl(两台机器都要执行) - 配置yum源: 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 - 安装: yum install -y kubelet kubeadm kubectl - 设置kubelet开机启动(此时不要启动,等待加入集群): systemctl enable kubelet 步骤4:在master节点上初始化集群 - 执行初始化命令(注意:这里需要指定apiserver-advertise-address为master节点的IP,以及指定pod-network-cidr,根据后续要安装的网络插件来定,比如flannel使用10.244.0.0/16): kubeadm init --apiserver-advertise-address=<master节点的IP> --pod-network-cidr=10.244.0.0/16 - 初始化完成后,按照输出的提示,拷贝配置文件: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config - 记录输出的join命令,用于node节点加入集群。 步骤5:在node节点上执行join命令(在node节点上执行) - 使用master节点初始化成功后输出的kubeadm join命令,在node节点上执行。 步骤6:安装网络插件(在master节点执行) - 安装flannel(或者其他网络插件,这里以flannel为例): kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 步骤7:检查节点状态(在master节点执行) - 等待一段时间,执行: kubectl get nodes - 当节点状态都变为Ready,表示集群搭建成功。 注意:在初始化时,可能需要指定Kubernetes版本(通过--kubernetes-version参数),因为默认会使用最新版本,但可能镜像仓库的镜像不匹配。建议使用较稳定的版本,例如v1.18.0(在引用[4]中使用的版本)。 另外,由于国内访问k8s.gcr.io困难,我们可以使用镜像仓库,例如: kubeadm init --apiserver-advertise-address=<masterIP> --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers 以上步骤是基于引用资料的整合调整。由于用户要求单masternode(两个节点),所以我们去掉了第二个node节点。 但是,请注意:在初始化master节点时,默认情况下master节点不会调度pod(有一个node-role.kubernetes.io/master:NoSchedule的污点)。如果用户希望master节点也能调度pod(即单节点集群,只有一个节点既是master又是node),那么我们需要在master节点上删除这个污点: kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule- 但是,根据用户要求(单masternode),我们有两个节点,所以master节点不应该调度pod,因此不需要删除污点。 因此,我们按照上述步骤进行部署。 下面将按照步骤详细展开,并给出具体的命令。 </think>### CentOS 7 单MasterNode Kubernetes集群部署教程 以下是基于Kubernetes v1.18版本的精简部署流程(需两台CentOS 7.4+主机): #### 一、节点准备(两台主机执行) ```bash # 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld # 关闭swap swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 设置SELinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 配置网络转发 cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system ``` #### 二、安装容器运行时(两台主机执行) ```bash # 安装Docker yum install -y docker-ce systemctl enable --now docker # 配置cgroupdriver cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"] } EOF systemctl restart docker ``` #### 三、安装Kubernetes组件(两台主机执行) ```bash # 添加阿里云源 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=0 EOF # 安装指定版本 yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 systemctl enable kubelet ``` #### 四、Master节点初始化(仅在master执行) ```bash kubeadm init \ --apiserver-advertise-address=<MASTER_IP> \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --pod-network-cidr=10.244.0.0/16 # 配置kubectl mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config ``` #### 五、Node节点加入集群(仅在node执行) ```bash # 使用master初始化时生成的join命令 kubeadm join <MASTER_IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash <HASH> ``` #### 六、部署网络插件(仅在master执行) ```bash # 安装Flannel网络 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` #### 七、验证集群状态(在master执行) ```bash kubectl get nodes -o wide ``` 预期输出: ``` NAME STATUS ROLES AGE VERSION master Ready master 5m v1.18.0 node Ready <none> 3m v1.18.0 ``` > **关键说明**: > 1. 默认情况下Master节点不调度Pod,如需启用: > ```bash > kubectl taint nodes master node-role.kubernetes.io/master- > ``` > 2. 若遇到镜像拉取问题,可使用阿里云镜像仓库[^2][^3] > 3. `kubeadm init`生成的token有效期为24小时,过期需重新生成: > ```bash > kubeadm token create --print-join-command > ``` [^1]: Kubernetes官方推荐最小生产环境需3节点,但单MasterNode适用于开发测试 [^2]: Kubeadm通过标准化流程简化集群部署复杂度(约减少70%手动操作) [^3]: Flannel网络插件需与`--pod-network-cidr`参数匹配 [^4]: 节点NotReady状态通常由网络插件未初始化导致,需等待3-5分钟
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭建華

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值