Kubernetes架构(2)

前言

Kubernetes的概念、架构、组件。介绍了namespace的概念和使用。
 描述Kubernetes架构。
 区分不同组件的功能。
 查看master和node节点中有哪些组件。
 创建namespace

一、Kubernetes 架构

node就是常说的worker节点。

1.Kubernetes是什么?

Kubernetes 是容器编排的软件。来自google公司。2015年发布 1.0版本
实现容器的自动管理。除k8s外还有openshift(redhat)等
k8s是一种开源的技术。它和openshif的关系是,openshift基于 k8s进行的封装。形成的产品

image.png

2.Kubernetes架构

node节点
就是常说的worker节点,数量取决于业务规模
master节点
做调度功能,不运行\color{red}{用户容器},但会运行系统容器(调度管理功能的容器)。
master节点至少3个节点(奇数,投票)

image.png

3 master节点

  • Kube-apiserver
     kube-apiserver对外暴露了Kubernetes API。它是的 Kubernetes 前端控制层。它被设计为水平扩展,即通过部署更多实例来缩放。
    api用来接收用户的请求,所有的指令都发给kube-apiserver。kube-apiserver宕掉所有指令都无法接收。
  • Etcd
     etcd 用于 Kubernetes 的后端存储。所有集群数据都存储在此处,始终为您的 Kubernetes 集群的 etcd 数据提供备份计划。
    1)Etcd是一个nosql数据库,key-value.存储k8s的元数据
    2)Etcd还是一个分布式协同系统(Etcd、zookeeper)
  • 具备选主功能,采用的raft算法(同paxos算法功能一样),zookeeper用的是ZAB协议(ZooKeeper Atomic Broadcast)基于paxos算法
    raft算法的动画演示 http://thesecretlivesofdata.com/raft/
  • 解决数据同步问题
  • 提供分布式锁机制
  • kube-controller-manager
     运行控制器,它们是处理集群中常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成独立的可执行文件,并在单个进程中运行。
    用来控制worker干活
  • kube-scheduler
     监视没有分配节点的新创建的 Pod,选择一个节点供他们运行。
    用来调度任务,选择用哪个worker进行工作。预选+优选

以上组件部署方式有2种
1) 组件直接部署在linux系统中,以进程的方式部署在系统中。一般以源码部署,早期方式
2)组件以pod(容器)的方式进行部署,主流的部署方式。

4 node节点

  • Kube-proxy
     Kube-proxy用于管理service的访问入口,包括集群内pod到service的访问和集群外访问service。
    用于自动完成防火墙的更改和端口的映射,如httpd服务8080端口映射到80端口
    如果master组件以pod方式部署,则Kube-proxy同样要运行在master节点-主流方式
    如果master组件以进程方式部署,则Kube-proxy不需要运行在master节点
  • Kubelet
     Kubelet是在集群内每个节点中运行的一个代理,用于保证pod的运行
    负责监控pod,管理pod的生命周期,负责与master做交互
    如果master组件以pod方式部署,则Kubelet同样要运行在master节点-主流方式
  • 容器引擎
     通常使用docker来运行容器,也可使用rkt等做为替代方案。
    k8s 本身是没有容器技术的,它只是用来管理容器的。他需要与容器技术对接,因此需要有容器引擎。通常使用docker。
    如果master组件以pod方式部署,则容器引擎同样需要运行在master中

5.推荐Add-ons(插件)

  • 除了上述组件外,kubernetes使用中通常需要一些额外的组件实现特定功能,常
    用的Add-ons包括:
     Core-dns:为整个集群提供DNS服务
    早期版本用Cube-dns
     Ingress Controller:为service提供外网访问入口
    使得外部可以访问内部pod
     Dashboard: 提供图形化管理界面
     Heapster 提供集群资源监控
    Heapster比较老了,现在多用metric来进行健康检查(包括普罗米修斯-Prometheus是一套开源的监控&报警&时间序列数据库的组合。适合监控Docker容器。因为Kubernetes的流行带动了Prometheus的发展)
     Flannel:为kubernetes提供方便的网络规划服务
    最灵活,最简单,最容易理解
    \color{red}{以上插件都可以pod方式进行部署}

6.Kubeadm

  • Kubeadm是社区主推的快速创建Kubernetes集群工具。
  • kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。它被故意设计
    为只关心启动集群,而不是之前的节点准备工作。同样的,诸如安装各种各样值得
    拥有的插件,例如 Kubernetes Dashboard、监控解决方案以及特定云提供商的
    插件,这些都不在它负责的范围。
     Master节点:kubeadm init,快速初始化安装主节点组件
     Node节点:kubeadm join,将从节点加入集群
    安装顺序要求先安装master节点,后安装worker节点。

6.1 部署Kubeadmin

1)目标:部署1台master + 2 台 worker节点

2c4G40G(必须2c),使用3台centos 7.6 虚拟机进行实验

角色 主机名 ip
master k8s-master 192.168.227.10
worker1 k8s-node1 192.168.227.11
worker2 k8s-node2 192.168.227.12
软件版本 版本号
kube-apiserver v1.14.1
kube-controller-manager v1.14.1
kube-scheduler v1.14.1
kube-proxy v1.14.1
pause v3.1
etcd v3.3.10
coredns v1.3.1
docker 18.06.2-ce

2)虚拟机节点环境初始化

step1 : 分别在3台虚拟机设置主机名称

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

step2 : 分别在3台节点上配置主机映射

cat <<EOF >> /etc/hosts
192.168.227.10 k8s-master
192.168.227.11 k8s-node1
192.168.227.12 k8s-node2
EOF

setp3 :3台虚拟机节点基础配置

1)停用防火墙(防止后续实验中k8s-master和worker通信异常)

systemctl stop firewalld
systemctl disable firewalld

2)关闭swap(kubernetes不支持swap)

swapoff -a
sed -i 's/.swap./#&/' /etc/fstab 《==== fstab中注释掉swap

3)加载br_netfilter

br_netfilter 用于做网桥的网络转发。详细解释见https://www.icode9.com/content-4-823662.html
modprobe br_netfilter

4)添加配置内核参数

该配置的解释详见 https://zhuanlan.zhihu.com/p/374919190
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

5)加载配置

sysctl -p /etc/sysctl.d/k8s.conf
输入如下命令,查看是否生成相关文件(bridge-nf-call-ip6tables bridge-nf-call-iptables
ls /proc/sys/net/bridge

[root@k8s-node1 ~]# ls /proc/sys/net/bridge
bridge-nf-call-arptables  bridge-nf-call-ip6tables  bridge-nf-call-iptables  bridge-nf-filter-pppoe-tagged  bridge-nf-filter-vlan-tagged  bridge-nf-pass-vlan-input-dev
[root@k8s-node1 ~]#
6)输入如下命令,添加Kubernetes的国内yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=1

repo_gpgcheck=1

gpgkey=https://mirrors.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

#安装依赖包以及相关工具

yum -y install epel-release

yum -y install yum-utils device-mapper-persistent-data lvm2 net-tools  conntrack-tools wget vim  ntpdate libseccomp libtool-ltdl tree

#配置ntp服务(配置完后建议重启一次)

systemctl enable ntpdate.service

echo '*/30 * * * * /usr/sbin/ntpdate time7.aliyun.com >/dev/null 2>&1' > /tmp/crontab2.tmp

crontab /tmp/crontab2.tmp

systemctl start ntpdate.service

#在所有节点安装docker ce

yum-config-manager --add-repo [https://download.docker.com/linux/centos/docker-ce.repo](https://download.docker.com/linux/centos/docker-ce.repo)

yum -y install docker-ce-18.06.2.ce

#使用国内docker image镜像源加速镜像拉取速度

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s [http://f1361db2.m.daocloud.io](http://f1361db2.m.daocloud.io)

#启动docker

systemctl daemon-reload

systemctl restart docker

systemctl enable docker

systemctl status docker
[root@k8s-node1 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 一 2022-01-24 10:32:50 CST; 18min ago
     Docs: https://docs.docker.com

7)将后续安装需要用到的配置文件下载到本地root home目录下并解压
cd /root
wget https://obs-k8s.obs.cn-north-4.myhuaweicloud.com/K8s.zip
yum install unzip
unzip K8s.zip
[root@k8s-master tmp]# ll
总用量 18600
-rw-r--r--. 1 root root       64 1月  21 15:23 crontab2.tmp
-rw-r--r--. 1 root root 19032369 1月  24 12:10 K8s.zip
-rw-r--r--. 1 root root     1964 1月  21 14:58 PrepInstall.sh
-rw-r--r--. 1 root root     1958 1月  21 14:58 PrepInstall.sh.bk
drwx------. 3 root root       17 1月  24 10:32 systemd-private-cb770c89c3f143ffbbfcae862290b305-vgauthd.service-jDUmEa
drwx------. 3 root root       17 1月  24 10:32 systemd-private-cb770c89c3f143ffbbfcae862290b305-vmtoolsd.service-SXlI4b
drwxr-xr-x. 2 root root      192 8月   1 2019 UAT
[root@k8s-master tmp]# 
8)编辑拉取Kubernetes镜像的脚本(3个节点均需执行)

国内无法访问gcr.io,这时需要使用如下命令从docker hub拉取相应镜像,尽量使用相匹配的镜像安装,具体拉取的镜像版本搭配,可以在官网搜索,这里对应版本见上文环境准备和规划中的软件版本描述。使用vi编辑器将以下脚本内容复制进文件中。

#!/bin/bash    images=(  kube-apiserver:v1.14.1  kube-controller-manager:v1.14.1  kube-scheduler:v1.14.1  kube-proxy:v1.14.1  pause:3.1  etcd:3.3.10  coredns:1.3.1  flannel:v0.11.0-amd64

kibana-oss:v6.6.1  )    a=0  for imageName in [${images[@]}](mailto:$%7bimages[@]%7d) ; do  docker pull oceancloud/$imageName  let a++  if [ "$a" -eq 9 ] ; then  docker tag oceancloud/$imageName docker.elastic.co/kibana/kibana-oss:6.6.1  elif [ "$a" -eq 8 ] ; then  docker tag oceancloud/$imageName quay.io/coreos/$imageName

else

docker tag oceancloud/$imageName k8s.gcr.io/$imageName  fi  done

\color{red}{注 :1) - 8) 有/tmp/PrepInstall.sh 脚本完成}

9)安装kubelet、kubeadm、kubectl(3个节点都安装)

kubelet:pod的生命周期管理
kubeadm:命令集:用于部署的命令安装时候使用的命令
kubectl:命令集:用于管理的命令

yum -y install kubelet-1.14.1-0.x86_64
yum -y install kubeadm-1.14.1-0.x86_64
yum -y install kubectl-1.14.1-0.x86_64
systemctl enable kubelet

添加Kubernetes命令补全功能(在K8s-master节点添加即可)

yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)       
echo "source <(kubectl completion bash)" >> ~/.bashrc
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容