容器_Docker ( 04 )

这篇具有很好参考价值的文章主要介绍了容器_Docker ( 04 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

容器_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地址 最低配置
master 192.168.1.50 2CPU,4G内存
node-0001 192.168.1.51 2CPU,4G内存
node-0002 192.168.1.52 2CPU,4G内存
node-0003 192.168.1.53 2CPU,4G内存
node-0004 192.168.1.54 2CPU,4G内存
node-0005 192.168.1.55 2CPU,4G内存
harbor 192.168.1.30 2CPU,4G内存
验证镜像仓库状态

容器_Docker ( 04 ),微服务,容器,K8S,docker,容器,运维

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>文章来源地址https://www.toymoban.com/news/detail-836680.html

  • 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

到了这里,关于容器_Docker ( 04 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 容器技术,1. Docker,2. Kubernetes(K8s):

    目录 容器技术 1. Docker: 2. Kubernetes(K8s): Docker和Kubernetes 容器的主要应用场景有哪些? 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,这种技术就是容器技术。 容器技术指通过在物理主机操作系统上创建一个一个

    2024年02月11日
    浏览(66)
  • 容器化(Docker、K8S)部署Elasticsearch + Kibana

    ElasticSearch简介 本次实验目标 实验环境 Docker部署Elasticsearch + Kibana 安装中文分词器插件,配置认证 基本操作 在华为云CCE中部署 使用Logstash进行数据迁移

    2024年01月19日
    浏览(74)
  • 橘子学K8S04之重新认识Docker容器

    我们之前分别从 Linux Namespace 的隔离能力、Linux Cgroups 的限制能力,以及基于 rootfs 的文件系统三个角度来理解了一下关于容器的核心实现原理。 这里一定注意说的是Linux环境,因为Linux Docker (namespaces + cgroups + rootfs) != Docker on Mac (based on virtualization) != Windows Docker (based on virtual

    2024年01月19日
    浏览(34)
  • 容器的崛起——Docker与K8s的相爱相杀

    对于K8s启用docker,作为普通开发者的体感是,k8s不就是docker的集群操作吗?k8s弃用docker就像鱼反对水一样不可思议,那么这两个技术究竟是什么关系,Kubernetes 是如何一步步与 Docker 解耦的,请看下文。 向应用代码隐藏分布式架构复杂度、让分布式架构得以成为一种能够普遍

    2023年04月08日
    浏览(73)
  • K8S容器运行时从Docker切换为Containerd

    K8S从1.24版本起不再支持docker容器引擎,可选的替代品有 containerd 、 cri-o 、 podman 。下面演示将单个node节点的容器引擎从docker切换为containerd的过程。 检查是否已经加载内核模块 overlay 和 br_netfilter 。 如果没有,手动加载内核模块: 检查系统内核参数: 如果没有开启,手动调

    2024年02月09日
    浏览(87)
  • K8S系列文章 之 容器网络基础 Docker0

    使用 ip addr 命令看一下网卡: 其中lo是本地回环地址,docker0就是docker0地址,也就是docker的地址172.17.0.1。 docker使用的是桥接模式,使用的技术是evth-pair技术,后面会解释。 比如有两个容器,容器A要去访问容器B,该如何访问?使用127.0.0.1吗?还是写docker0地址? 我们运行起一

    2024年02月14日
    浏览(61)
  • ​k8s 1.24 1.25 集群使用docker作为容器

    背景 在新版本Kubernetes环境(1.24以及以上版本)下官方不在支持docker作为容器运行时了,若要继续使用docker 需要对docker进行配置一番。需要安装cri-docker作为Kubernetes容器 查看当前容器运行时 安装docker 安装cri-docker 为kubelet配置容器运行时 关于 https://www.oiox.cn/ https://www.oiox.cn

    2024年02月12日
    浏览(67)
  • 【容器架构】你知道有 Docker 为什么还要 K8s 吗?

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人 Java知识图谱点击链接: 体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 , 不然下次找不到哟

    2024年02月16日
    浏览(71)
  • kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习

    简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离。 这种隔离是怎么做到的呢?它利用了内核提供的 namespace 和 cgroup 这 2 种技术。这些技术能力在 Linux 中已经存在了很长时间。而 Docker 或容器技术致力于将这些功能更易于使用和更

    2024年02月07日
    浏览(66)
  • K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(上)

    🔼上一集:win11+vmware17+centos7.9环境搭建 *️⃣主目录:温故知新专栏 🔽下一集:K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(下) 之前部署过dolphinscheduler3.1.8,看页面增加了K8S模块,所以想着部署一下K8S,学习一下,而且海豚调度也提供了K8S部署方式,经过一番了解,发现

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包