k8s集群部署01

  • Kubernetes简介
  • Kubernetes部署
  • 节点部署
  • 关于yum缓存提示满了,Rhel7换源解决
  • 报错
  • 解决
  • 过程
  • 配置文件内容—要自己看链接是否过期
  • 集群初始化
  • Kubernetes-kubectl命令出现错误【The connection to the server localhost:8080 was refused - did you specify the right host or port?


Kubernetes简介


  • 官方去掉了master和slaves

  • k8s是一个管理工具,但越来越发展像一个操作系统
  • 网红直播——阿里云平台,有重要数据如医药行业,组建控制中心。
  • 底层架构可以是物理机、虚拟机或者是云

Kubernetes部署

节点部署

  • server3:空白,server1和2:已装好docker
  • server1和2干掉不用的网络
  • 卷、网络和容器都各有参数
  • 把不用的删除
  • 删除容器
  • 再次删除不用的卷


  • 在sever3安装docker
  • 阿里云、腾讯云的docker版本其实很低,1.20都算很高了,最新的1.24
  • 三台机器docker版本最好保持一致
  • 将server2的yum源拷贝到3过去
  • 用的是centos社区版
  • e17比较低,18、19、20可以
  • k8s在1.24之前,每个节点上有Kubelet控制整个节点生命周期,通过gRPC的协议连接dockershim(这就是Kubelet内嵌的一个docker垫片),Docker一出世开辟了级联,也是武林盟主地位的,后面发展不好(一手好牌打的稀烂),而对于k8s而言这些都是多余的,两行命令行即可完成,只需要containerd就行,docker引擎一直挡在前面,通过其再调用别的。低级调用链。

  • 启动docker
  • 拷贝配置文件到server3
  • 看官网开始配置
  • 三台机器都:关闭防火墙,禁掉swap交换分区,并防止开机自启
  • 网络、并允许iptables检查桥接流量
  • k8s和docker的默认驱动不一样,docker为cgroups,而k8s需要systemd
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

  • 把配置文件拷贝到server2、3
  • 在每个节点重启一下,并确认

  • 安装kubeadm、kubelet和kubectl
  • 初始化集群:kubeadm
  • 在集群的每个节点上用来启动Pod和容器等:kubele
  • 用来与集群通信的命令行工具:kubectl
  • 登陆阿里云链接
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

使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_CentOS


  • 不需要最新版,1.24及以上默认不支持docker(该种情况下只能配runtime)
  • 生态环境需要稳定
  • 安装1.23.6版本的三个包
  • 启动kubelet,并设置开机自启
  • 每个节点都一样

关于yum缓存提示满了,Rhel7换源解决

报错

使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_centos_02

解决

  • 解决:提示yum源缓存满了无法下载,我就先备份旧的,然后下载了一个新阿里云的源,清理旧缓存数据,缓存新数据,最后yum makecache

过程


  • 完成

配置文件内容—要自己看链接是否过期

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-7 - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/os/$basearch/
        http://mirrors.aliyuncs.com/centos/7/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/7/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-7 - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/updates/$basearch/
        http://mirrors.aliyuncs.com/centos/7/updates/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/7/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-7 - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/extras/$basearch/
        http://mirrors.aliyuncs.com/centos/7/extras/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/7/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-7 - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/centosplus/$basearch/
        http://mirrors.aliyuncs.com/centos/7/centosplus/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/7/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#contrib - packages by Centos Users
[contrib]
name=CentOS-7 - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/7/contrib/$basearch/
        http://mirrors.aliyuncs.com/centos/7/contrib/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/7/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

集群初始化


  • 查看集群默认配置信息
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_kubernetes_03

  • k8s的两种默认配置方式
  • 第一种是把k8s生成默认配置文件,把需要的东西做适当的修改一推就行,第二种是通过命令行的方式,但两种方式不能兼容。
  • 默认镜像仓库的位置,所以默认情况肯定拉取不了
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_centos_04

  • 通过参数指定镜像仓库,指向阿里云镜像站
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_容器_05

  • 当前最新匹配的是1.26.0,现在用的是1.23.0
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_centos_06

  • 指定k8s安装版本
  • 下载的k8s集群的镜像版本决定了真正k8s镜像版本
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_docker_07

  • 提前拉取镜像,以免初始化拉取的时候等待
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_kubernetes_08

  • 下载完成,开始初始化
  • 并给容器Pod(最小的原子单位,和docker不一样)指定网络IP段,因为我们使用的是第三方Flannel组件
  • 报错后修改虚拟机配置
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_CentOS_09

  • 拉取镜像过程会非常快
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_CentOS_10

  • 表示想在普通用户上操作:
    在普通用户下创建一个目录,把etc下面的证书拷贝过来,通过这个证书用管理员的身份去连接,拷贝到部署目录中,继而去组建
  • 超级用户直接复制一个变量就行
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_docker_11

  • Pod还没有运行起来,组建没有就绪
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_kubernetes_12


  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_centos_13

  • 1.24的时候master就没有了
  • 链接: link
  • k8s v.1.17版本上运行
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_容器_14

  • 链接: link
  • 内含两个镜像
  • 通过kubectl做一些修改和运行
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_kubernetes_15

  • 若有警告不需要管,是让1.25之后找到替换掉
  • 清单里面定义的是对资源的期望状态
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_docker_16

  • 每个节点都会部署kube-flannel-ds-bkl4v
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_CentOS_17

  • 补齐功能
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_kubernetes_18


  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_容器_19

  • 下载镜像之后运行
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_docker_20

  • 全部为running状态
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_docker_21

  • 节点为ready状态
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_centos_22

  • 这时完成了主控节点部署
  • 寻找master的join信息,join的token默认有效期24小时
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_CentOS_23


  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_centos_24

  • 如果超过24小时需要扩容其他节点,需要再kubeadm token create创建token,然后替换该命令里的token就行
  • 使用参数自动打印
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_docker_25

  • 若过期敲回车运行
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_centos_26

  • kubeadm token create --print-join-command
  • 这里都增大server2和3的内存以免后面报错
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_centos_27

  • 关闭SELinux
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_centos_28


  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_docker_29

  • 关闭防火墙
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_kubernetes_30

  • 记得设置开机自启服务
  • 使用 k8s 和 k3s 构建边缘计算集群 k8s集群部署方案_docker_31

systemctl enable --now kubelet.service
systemctl disable firewalld --now
getenforce
sysctl -w net.ipv4.ip_forward=1

#重新生成token
kubeadm token create --print-join-command
systemctl status kubelet
  • 发现服务已经起来了
  • 将server2和3部署好

Kubernetes-kubectl命令出现错误【The connection to the server localhost:8080 was refused - did you specify the right host or port?

  • 解决:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
  • 节点flannel还未加载完,代理没有跑完
  • 查看节点情况
kubectl get pod -A
kubectl get pod -A -o wide
  • 查看镜像部署下载情况
  • 一个三个节点的k8s就部署好了
  • 来跑一个镜像,master不会参与调度,会分配给2和3
  • running才是下载好的镜像,才能运行
  • 查看镜像
kubectl get pod -A
kubectl get pod -A -o wide
kubectl describe pod demo
  • 是一个集群,只要在一个节点上操作就行