1. 概述

老话说的好:努力学习,提高自己,让自己知道的比别人多,了解的别人多。

言归正传,之前我们聊了 Docker,随着业务的不断扩大,Docker 容器不断增多,物理机也不断增多,此时我们会发现,登录到每台机器去手工操作 Docker 是一件很麻烦的事情。

这时,我们需要一个好用的工具来管理 Docker,帮我们创建、运行、调整、销毁这些容器,帮我们监控哪个容器宕掉了,然后重新启动这个容器等等。

kubernetes(k8s)就是一个很好的选择,今天我们先来聊聊 kubernetes(k8s)是如何搭建的。

2. 场景说明

服务器A IP:192.168.1.12

服务器B IP:192.168.1.11

服务器C IP:192.168.1.15

服务器A hostname:zhuifengren2

服务器B hostname:zhuifengren3

服务器C hostname:zhuifengren4

准备三台服务器,CentOS7 操作系统。

三台服务器都已安装了 Docker,关于 Docker 的安装可参见我的另一篇文章《Docker 急速入门》(https://www.cnblogs.com/w84422/p/15580575.html

服务器A 作为 Master 节点,服务器B 和 服务器C 作为数据节点。

3. kubernetes(k8s)安装(CentOS7)

3.1 官网地址

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

3.2 服务器配置要求

内存至少2G

CPU至少2核

硬盘至少20G

3.3 关闭 SELinux

方式一:

# setenforce 0
# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

方式二:

# vim /etc/sysconfig/selinux

SELINUX=enforcing 改为 SELINUX=disabled

重启服务器

3.4 设置路由

# cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

br_netfilter
EOF

# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# sysctl --system

3.5 关闭系统的 Swap

# swapoff -a

# vi /etc/fstab

注释掉 SWAP 的自动挂载

# vi /etc/sysctl.d/k8s.conf

添加下面一行:
vm.swappiness=0

# sysctl -p /etc/sysctl.d/k8s.conf

3.6 安装并启动 kubernetes(K8s)

# 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
exclude=kube*
EOF

# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# systemctl enable kubelet

# systemctl restart kubelet

3.3 到 3.6 的步骤在3台服务器上都执行

4. kubernetes(k8s)集群搭建(CentOS7)

4.1 修改 Docker 配置

# cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"data-root": "/data/docker"
}
EOF

# systemctl daemon-reload
# systemctl restart docker

4.2 查看需要的镜像

# kubeadm config images list

  1. k8s.gcr.io/kube-apiserver:v1.22.3
  2. k8s.gcr.io/kube-controller-manager:v1.22.3
  3. k8s.gcr.io/kube-scheduler:v1.22.3
  4. k8s.gcr.io/kube-proxy:v1.22.3
  5. k8s.gcr.io/pause:3.5
  6. k8s.gcr.io/etcd:3.5.0-0
  7. k8s.gcr.io/coredns/coredns:v1.8.4

4.3 从国内源拉取镜像

由于 k8s.cgr.io 无法访问,因此我们需要先使用国内镜像源拉下来,再改tag

执行下面脚本:

  1. #/bin/bash
  2. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.3
  3. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.22.3
  4. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.3
  5. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.3
  6. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5
  7. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0
  8. docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4
  9. docker pull quay.io/coreos/flannel:v0.15.1-amd64
  10.  
  11. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.3 k8s.gcr.io/kube-apiserver:v1.22.3
  12. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.22.3 k8s.gcr.io/kube-controller-manager:v1.22.3
  13. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.3 k8s.gcr.io/kube-scheduler:v1.22.3
  14. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.3 k8s.gcr.io/kube-proxy:v1.22.3
  15. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5 k8s.gcr.io/pause:3.5
  16. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0 k8s.gcr.io/etcd:3.5.0-0
  17. docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4 k8s.gcr.io/coredns/coredns:v1.8.4
  18.  
  19. docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.22.3
  20. docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.22.3
  21. docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.22.3
  22. docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.22.3
  23. docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5
  24. docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.0-0
  25. docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4

4.1 4.2 4.3 的步骤在三台服务器都需要执行

4.4 初始化集群

在 Master 节点执行

# kubeadm init --apiserver-advertise-address=192.168.1.12 --pod-network-cidr=10.244.0.0/16

其中,192.168.1.12 是 Master 节点的 IP 地址,可根据实际情况修改。

4.5 Get "http://localhost:10248/healthz": dial tcp [::1]:10248: connect: connection refused 报错解决

初始化集群时,如果报以上的错误,在 Master 节点按以下步骤操作即可:

# vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

增加:
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false"

cat > /var/lib/kubelet/config.yaml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF

# systemctl daemon-reload
# systemctl restart kubelet
# kubeadm reset -f

4.6 再次执行集群初始化命令

在 Master 节点执行

# kubeadm init --apiserver-advertise-address=192.168.1.12 --pod-network-cidr=10.244.0.0/16

出现以下信息,说明初始化成功:

  1. Your Kubernetes control-plane has initialized successfully!
  2.  
  3. To start using your cluster, you need to run the following as a regular user:
  4.  
  5. mkdir -p $HOME/.kube
  6. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  7. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  8.  
  9. Alternatively, if you are the root user, you can run:
  10.  
  11. export KUBECONFIG=/etc/kubernetes/admin.conf
  12.  
  13. You should now deploy a pod network to the cluster.
  14. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  15. https://kubernetes.io/docs/concepts/cluster-administration/addons/
  16.  
  17. Then you can join any number of worker nodes by running the following on each as root:
  18.  
  19. kubeadm join 192.168.1.12:6443 --token x0u0ou.q6271pyjm7cv5hxl \
  20. --discovery-token-ca-cert-hash sha256:907ffb03d73f7668b96024c328880f95f4249e98da1be44d1caeb01dd62173da

4.7 根据上一步的信息 export config 文件 及设置网络

# export KUBECONFIG=/etc/kubernetes/admin.conf

这里我们使用 flannel 网络

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

到此为止,Master 节点搭建完毕。

4.8 根据 4.6 步骤的信息,将两个数据节点加入集群

在 服务器B 和 服务器C,执行如下命令(来源于 4.6 步骤的信息):

  1. # kubeadm join 192.168.1.12:6443 --token x0u0ou.q6271pyjm7cv5hxl \
  2. --discovery-token-ca-cert-hash sha256:907ffb03d73f7668b96024c328880f95f4249e98da1be44d1caeb01dd62173da

如果执行不成功,或者数据节点始终是 NotReady 状态,则参见 4.5 步骤,修改配置。

4.9 在 Master 节点,查看集群信息

# kubectl get node

如果状态都是 Ready,则 Kubernetes(K8s)集群搭建成功。

5. 综述

今天聊了一下 如何使用国内的镜像源搭建 kubernetes(k8s)集群 ,希望可以对大家的工作有所帮助。

欢迎帮忙点赞、评论、转发、加关注 :)

关注追风人聊Java,每天更新Java干货。

6. 个人公众号

追风人聊Java,欢迎大家关注

使用国内的镜像源搭建 kubernetes(k8s)集群的更多相关文章

  1. Centos7 安装部署Kubernetes(k8s)集群

    目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.安装部署Kubernetes集群 4. ...

  2. 搭建Kubernetes容器集群管理系统

    1.Kubernetes 概述 Kubernetes 是 Google 开源的容器集群管理系统,基于 Docker 构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.劢态扩缩容等功能套件. 基 ...

  3. 使用kubectl管理Kubernetes(k8s)集群:常用命令,查看负载,命名空间namespace管理

    目录 一.系统环境 二.前言 三.kubectl 3.1 kubectl语法 3.2 kubectl格式化输出 四.kubectl常用命令 五.查看kubernetes集群node节点和pod负载 5 ...

  4. Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14

    目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  9. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

随机推荐

  1. WinForm 控件 DataGridView 常用操作

    1.取消列自动生成 在窗体load事件里面设置表格dataGridView的AutoGenerateColumns为 false dataGridView.AutoGenerateColumns = ...

  2. 3D Analyst Tools(3D Analyst 工具)

    3D Analyst 工具 工具里有又细分如下分类: 注:以下代码的参数需要另行配置,不能直接执行:Python2不支持中文变量! 1.3D 要素 # Process: 3D 内部 arcpy.Ins ...

  3. SpringBoot整合Mabatis

    1.导入 MyBatis 所需要的依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <ar ...

  4. 云原生的弹性 AI 训练系列之三:借助弹性伸缩的 Jupyter Notebook,大幅提高 GPU 利用率

    Jupyter Notebooks 在 Kubernetes 上部署往往需要绑定一张 GPU,而大多数时候 GPU 并没有被使用,因此利用率低下.为了解决这一问题,我们开源了 elastic-jupy ...

  5. python OptionParser的用法

    from optparse import OptionParser parser = OptionParser(usage = "usage: %prog [options] arg&quo ...

  6. Scrum Meeting 0507

    零.说明 日期:2021-5-7 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 测试 测试 cyy ...

  7. Spring Cloud Gateway Route Predicate Factory 的使用

    Spring Cloud Gateway的使用 一.需求 二.基本组成 1.简介 2.核型概念 1.Route 路由 2.Predicate 谓语.断言 3.Filter 过滤器 3.工作原理 三.网 ...

  8. 单片机STM32学习笔记之寄存器映射详解

    我们知道,存储器本身没有地址,给存储器分配地址的过程叫存储器映射,那什么叫寄存器映射?寄存器到底是什么? 在存储器Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共32bit,每一 ...

  9. UVM RAL模型和内置seq

    转载:UVM RAL模型:用法和应用_寄存器 (sohu.com) 在系统设计中通常会面临两大挑战:缩小技术节点的规模和上市时间(TTM,Time to Market).为了适应激烈的市场竞争,大多数 ...

  10. 嵌入式开发板nfs挂载

    板子要开始调试了,第一个头大的问题就是调试过程中更新的文件怎么更新到板子上,以前用sd卡拷贝来来回回太浪费时间了,adb也需要接线各种连接操作. 现在板子有wifi可用,是时候把nfs共享搭起来了. ...