容器_Docker ( 04 )

4 篇文章 0 订阅
3 篇文章 0 订阅

容器_Docker ( 03 )

解密云原生 - 集群概述

kubernetes概述

kubernetes起源
  • 如果想要将docker应用于具体的业务实现 , 是存在困难的 – 编排, 管理和调度等各个方面 , 都不容易.于是 , 人们迫切需要一套管理系统 , 对docker及容器进行更高级更灵活的管理 , 于是kubernetes出现了
  • 俗称 K8S
K8S
  • K8S是google 2014年创造的
  • K8Sbuingbushi全新的发明 , 是google10多年大规模容器管理技术Borg的开源版本
  • K8S是容器集群管理系统 , 是一个开源的平台 , 可以实现容器集群的自动化部署 , 自动化扩缩容 , 自维护等功能

k8s集群架构

  • 核心架构
    • master (管理节点) : 管理和角色
    • node (计算节点) : 具体操作
    • image (镜像仓库) : 具体镜像

角色与功能

  • Master功能
    • 提供集群的控制
    • 对集群进行全局决策
    • 检测和响应集群事件
  • Master节点核心组件
    • API Server
      • 是整个系统的对外接口 , 供客户端和其他组件调用
      • 后端元数据存储与etcd
    • Scheduler
      • 负责对集群内部的资源进行分配和调度
    • ControllerManager
      • 负责管理控制器 , 相当于"大总管"
    • etcd
      • 构建一个高可用的分布式键值数据库 , 基于Go语言实现
      • kubernetes在运行过程中产生的元数据全部存储在etcd中
  • Node功能
    • 运行容器的实际节点
    • 提供运行环境
    • 在多个节点上运行
    • 水平扩展
  • Node核心组件
    • kubelet
      • 负责监视pod , 包括创建 , 修改 , 删除等
    • kube-proxy
      • 主要负责为Pod对象提供代理
      • 实现sevice的通信与负载均衡
    • Runtime
      • 容器管理
  • 镜像仓库
    • 存储镜像
    • 为节点提供镜像支持
  • 仓库组件
    • Registry
    • Harbor

安装部署控制节点

安装控制节点

部署概述
  • 官网 : https://kubernetes.io
  • 安装部署方式 (两种)
    1. 源码部署 : 下载源码或编译好的二进制 , 手工添加参数启动服务 , kubernetes采用证书认证方式 , 需要创建大量整数
    2. 容器部署 : 官方把服务做成"镜像" , 下载镜像 , 启动即可
  • 官方工具kuberadm采用的方式
部署概述
  1. 内核版本 >= 3.10
  2. 最低配置 2cpu , 2G内存
  3. 节点之中不可以有重复的主机名 , MAC地址或product_uuid
  4. 卸载防火墙
  5. 禁用 swap
主机清单
主机名IP地址最低配置
master192.168.1.502CPU,4G内存
node-0001192.168.1.512CPU,4G内存
node-0002192.168.1.522CPU,4G内存
node-0003192.168.1.532CPU,4G内存
node-0004192.168.1.542CPU,4G内存
node-0005192.168.1.552CPU,4G内存
harbor192.168.1.302CPU,4G内存
验证镜像仓库状态

请添加图片描述

1. 配置软件仓库
  • 官网下载地址 : https://packages.cloud.google.com
  • 配置软件包仓库
    • 添加docker到软件包仓库
    • 添加 kubernetes/packages 到软件包仓库
[root@ecs-proxy s4]# rsync -av docker/ /var/localrepo/docker/

[root@ecs-proxy s4]# rsync -av kubernetes/packages/ /var/localrepo/k8s/

[root@ecs-proxy s4]# createrepo --update /var/localrepo/
2. 系统环境配置
# 禁用 firewall 和 swap
[root@master ~]# sed '/swap/d' -i /etc/fstab

[root@master ~]# swapoff -a

[root@master ~]# dnf remove -y firewalld-*
3. 安装软件包
  • kubeadm 集群配置工具
  • kubelet 管理pod , 在集群中的每个节点上启动
  • kubectl 与集群通信的命令行工具
  • containerd 容器管理软件
  • ipvsadm 集群管理工具
  • iproute-tc 网络流量管理工具
# 添加主机信息
[root@master ~]# vim /etc/hosts
192.168.1.30    harbor
192.168.1.50    master
192.168.1.51    node-0001
192.168.1.52    node-0002
192.168.1.53    node-0003
192.168.1.54    node-0004
192.168.1.55    node-0005

#安装软件包
[root@master ~]# dnf install -y kubeadm kubelet kubectl containerd.io ipvsadm ipset iproute-tc
4. 配置 containerd
# 生成默认配置文件
[root@master ~]# containerd config default >/etc/containerd/config.toml

[root@master ~]# vim /etc/containerd/config.toml
61:     sandbox_image = "harbor:443/k8s/pause:3.9"               #配置根容器镜像地址
125:    SystemdCgroup = true                                     #配置cgroup管理驱动 , 必须与kubelet一致
154 行新插入:    #配置私有镜像仓库
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://harbor:443"]    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"]
          endpoint = ["https://harbor:443"]    [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor:443".tls]
          insecure_skip_verify = true
          
# 启动服务
[root@master ~]# systemctl enable --now kubelet containerd
5. 配置内核参数
[root@master ~]# cat >/etc/modules-load.d/containerd.conf<<EOF
overlay                     # overlay文件系统模块
br_netfilter                # 网桥防火墙模块
xt_conntrack                # 链接跟踪表模块
EOF

[root@master ~]# systemctl start systemd-modules-load.service 

# 设置内核参数
[root@master ~]# cat >/etc/sysctl.d/99-kubernetes-cri.conf<<EOF
net.ipv4.ip_forward = 1                    #开启路由转发
net.bridge.bridge-nf-call-iptables = 1     #开启桥流量监控
net.bridge.bridge-nf-call-ip6tables = 1    #开启桥流量监控
net.netfilter.nf_conntrack_max = 1000000   #设置链接跟踪表大小

EOF

[root@master ~]# sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf
6. 导入k8s镜像
  • 如何获取镜像
    • 使用 kubeadm管理工具可以查询镜像信息
    • 在可以访问官方镜像仓库的机器上使用 docker pull 下载
[root@master ~]# kubeadm  config  images list
registry.k8s.io/kube-apiserver:v1.26.0
registry.k8s.io/kube-controller-manager:v1.26.0
registry.k8s.io/kube-scheduler:v1.26.0
registry.k8s.io/kube-proxy:v1.26.0
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.9.3
  • 导入镜像 :
    • 拷贝 lubernetes/init 目录到 master
    • 安装docker软件包
# 拷贝本阶段 kubernetes/init 目录到 master
[root@ecs-proxy s4]# rsync -av kubernetes/init 192.168.1.50:./
[root@master ~]# dnf install -y docker-ce

[root@master ~]# mkdir -p /etc/docker

[root@master ~]# vim /etc/docker/daemon.json 
{
    "registry-mirrors":["https://harbor:443"],
    "insecure-registries":["harbor:443"]
}

[root@master ~]# systemctl enable --now docker
  • 导入镜像到harbor仓库
# 登录 harbor 仓库,上传镜像
[root@master ~]# docker login harbor:443 
Username: admin
Password: ********
Login Succeeded

[root@master ~]# docker load -i init/v1.26.0.tar.xz

#打标签 , 上传到harbor仓库
[root@master ~]# docker images|while read i t _;do
    [[ "${t}" == "TAG" ]] && continue
    [[ "${i}" =~ ^"harbor:443/".+ ]] && continue
    docker tag ${i}:${t} harbor:443/k8s/${i##*/}:${t}
    docker push harbor:443/k8s/${i##*/}:${t}
    docker rmi ${i}:${t} harbor:443/k8s/${i##*/}:${t}
done
初始化主控值节点
1. 自动补全设置 , 设置tab键
  • kubectl , kubeadm支持自动补全功能 , 可以节省大量输入
  • 自动补全脚本由kubectl , kubeadm产生 名仅需要在shell配置文件中调用即可
[root@master ~]# source <(kubeadm completion bash|tee /etc/bash_completion.d/kubeadm)

[root@master ~]# source <(kubectl completion bash|tee /etc/bash_completion.d/kubectl)
2. 安装环境验证
  • 如果error.log为空 , 代表配置正确
  • 如果 error.log有报错 , 排除错误后在重新执行验证指令 , 直到配置正确
# 测试系统环境
[root@master ~]# kubeadm init --config=init/init.yaml --dry-run 2>error.log

[root@master ~]# cat error.log

[root@master ~]# rm -rf error.log /etc/kubernetes/tmp
3. 初始化主节点
# 主控节点初始化
[root@master ~]# kubeadm init --config=init/init.yaml |tee init/init.log
4. 验证集群
# 管理授权
[root@master ~]# mkdir -p $HOME/.kube

[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 验证安装结果
[root@master ~]# kubectl get nodes
NAME     STATUS     ROLES           AGE   VERSION
master   NotReady   control-plane   19s   v1.26.0

calico插件

calico概述
  • 在虚拟化平台中 , 比如OpenStack , Docker等都需要实现workload之间互连 , 但同时也需要对容器做隔离控制 , 设置访问策略 . calico就可以解决以上所有问题
  • calico可以让不同节点上的容器实现互联互通 , 同时也可以设置访问策略 , 他是一种容器之间网络互通的解决方案
calico优势
  • 更节约资源 : Calico使用三层路由方法 , 抑制二层广播 , 减少了资源开销 , 并且具有可扩展性
  • 更容易管理 : 因为没有隧道 , 意味着workloads之间路径更短更简单 , 配置更少 , 更容易管理
  • 更少的依赖 : Calico仅依赖三层路由可达
  • 适配性广 : 较少的依赖性使它能够适配所有 VM , Container . 白盒或者混合环境场景
calico安装
  • calico主页地址

    https://github.com/projrctcalico/calico

# 拷贝本阶段 kubernetes/plugins 目录到 master
[root@ecs-proxy s4]# rsync -av kubernetes/plugins 192.168.1.50:.
[root@ecs-proxy s4]# tree plugins/calico
1. 导入镜像到私有仓库
  • 导入完成后 , 通过harbor页面验证导入结果
[root@master ~]# cd plugins/calico

[root@master calico]# docker load -i calico.tar.xz

[root@master calico]# docker images|while read i t _;do
    [[ "${t}" == "TAG" ]] && continue
    [[ "${i}" =~ ^"harbor:443/".+ ]] && continue
    docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}
    docker push harbor:443/plugins/${i##*/}:${t}
    docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
done
2. 修改资源对象文件中镜像的地址
[root@master calico]# sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' calico.yaml
4443:  image: docker.io/calico/cni:v3.25.0
4471:  image: docker.io/calico/cni:v3.25.0
4514:  image: docker.io/calico/node:v3.25.0
4540:  image: docker.io/calico/node:v3.25.0
4757:  image: docker.io/calico/kube-controllers:v3.25.0
3. 使用资源对象文件安装插件
[root@master calico]# kubectl apply -f calico.yaml

[root@master calico]# kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   23m   v1.26.0

Kubeadm工具

token管理
  • node节点如何加入集群

    • 从master的安装日志里查找安装指令样例

      kubeadm join 192.168.1.50:6443 --token <token> --discovery-token-ca-cert-hash sha256: <token ca hash>

  • node节点向加入集群必须有master提供token
    • token相当于证明文件
    • token-ca-cert-hash 验证文件的真伪
token 管理命令
  • 可选参数 --print-join-command直接打印安装命令
  • 可选参数 --ttl 设置token生命周期 , 0 为无限
1. 获取凭证
# 创建 token
[root@master ~]# kubeadm token create --ttl=0 --print-join-command
kubeadm join 192.168.1.50:6443 --token fhf6gk.bhhvsofvd672yd41 --discovery-token-ca-cert-hash sha256:ea07de5929dab8701c1bddc347155fe51c3fb6efd2ce8a4177f6dc03d5793467
2. 查询删除token
# 查看 token
[root@master ~]# kubeadm token list
TOKEN                     TTL         EXPIRES           
abcdef.0123456789abcdef   23h         2022-04-12T14:04:34Z

# 删除 token
[root@master ~]# kubeadm token delete abcdef.0123456789abcdef
bootstrap token "abcdef" deleted
3. 获取token整数的hash
  • CA证书路径 /etc/kubernetes/pki/ca.crt
# 获取token_hash
# 1、查看安装日志  2、在创建token时候显示  3、使用 openssl 计算得到
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der |openssl dgst -sha256 -hex
4. node安装
  • 计算节点安装
  • 参考 控制节点安装步骤,在计算节点上完成步骤 2,3,4,5
[root@node ~]# 参考控制节点安装步骤2

[root@node ~]# 参考控制节点安装步骤3

[root@node ~]# 参考控制节点安装步骤4


[root@node ~]# kubeadm join 192.168.1.50:6443 --token fhf6gk.bhhvsofvd672yd41 --discovery-token-ca-cert-hash sha256:ea07de5929dab8701c1bddc347155fe51c3fb6efd2ce8a4177f6dc03d5793467
#------------------------ 在 master 节点上验证---------------------------
[root@master ~]# kubectl get nodes
NAME        STATUS   ROLES           AGE   VERSION
master      Ready    control-plane   76m   v1.26.0
node-0001   Ready    <none>          61s   v1.26.0
5. 使用playbook完成批量部署
  • 拷贝 kubernetes/nodejoin 到跳板机
[root@ecs-proxy s4]# cp -a kubernetes/nodejoin /root/

[root@ecs-proxy s4]# cd ~/nodejoin/

[root@ecs-proxy nodejoin]# vim nodeinit.yaml
... ...
  vars:
    master: '192.168.1.50:6443'
    token: '这里改成你自己的token'
    token_hash: 'sha256:这里改成你自己的token ca hash'
... ...

[root@ecs-proxy nodejoin]# ansible-playbook nodeinit.yaml
6. 查看集群状态
# 验证节点工作状态
[root@master ~]# kubectl get nodes
NAME        STATUS   ROLES           AGE   VERSION
master      Ready    control-plane   99m   v1.26.0
node-0001   Ready    <none>          23m   v1.26.0
node-0002   Ready    <none>          57s   v1.26.0
node-0003   Ready    <none>          57s   v1.26.0
node-0004   Ready    <none>          57s   v1.26.0
node-0005   Ready    <none>          57s   v1.26.0

# 验证容器工作状态
[root@master ~]# kubectl -n kube-system get pods
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-fc945b5f7-p4xnj   1/1     Running   0          77m
calico-node-6s8k2                         1/1     Running   0          59s
calico-node-bxwdd                         1/1     Running   0          59s
calico-node-d5g6x                         1/1     Running   0          77m
calico-node-lfwdh                         1/1     Running   0          59s
calico-node-qnhxr                         1/1     Running   0          59s
calico-node-sjngw                         1/1     Running   0          24m
coredns-844c6bb88b-89lzt                  1/1     Running   0          59m
coredns-844c6bb88b-qpbvk                  1/1     Running   0          59m
etcd-master                               1/1     Running   0          70m
kube-apiserver-master                     1/1     Running   0          70m
kube-controller-manager-master            1/1     Running   0          70m
kube-proxy-5xjzw                          1/1     Running   0          59s
kube-proxy-9mbh5                          1/1     Running   0          59s
kube-proxy-g2pmp                          1/1     Running   0          99m
kube-proxy-l7lpk                          1/1     Running   0          24m
kube-proxy-m6wfj                          1/1     Running   0          59s
kube-proxy-vqtt8                          1/1     Running   0          59s
kube-scheduler-master                     1/1     Running   0          70m
  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值