k8s の 基本组件介绍

安装 minikube

本文以 ubuntu22.04 为例,讲述如何安装 minikube
详细使用步骤可参考: minikube教程

安装 docker

export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"

# 如您使用 curl
curl -fsSL https://get.docker.com/ | sudo -E sh
# 如您使用 wget
wget -O- https://get.docker.com/ | sudo -E sh

/etc/docker/daemon.json 中加入如下配置,然后重启docker

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

安装 kubectl

# 添加并信任APT证书
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

# 添加源地址
add-apt-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"

sudo apt update
sudo apt install -y kubectl

zsh 添加自动补全功能
请将下面内容加入到文件 ~/.zshrc

source <(kubectl completion zsh)

安装 minikube

# 下载安装包
wget -c https://github.com/kubernetes/minikube/releases/download/v1.24.0/minikube_1.24.0-0_amd64.deb

# 安装编译好的 deb文件
sudo apt install -y ./minikube_1.24.0-0_amd64.deb

# 使用阿里云镜像运行 minikube
minikube start --image-mirror-country='cn' --cpus=4 --memory=4096mb

国内使用 KubeKeyubuntu22.04 上一键安装 k8s

经过本人测试,普通用户身份安装,会有些奇奇怪怪的问题,建议使用 root 安装。

允许使用 root 用户登录 ubuntu 系统

ubuntu 默认使用 root登录,因此需首先打开 root 用户权限
打开 sudo vim /etc/ssh/sshd_config 文件的 PermitRootLogin 属性为 yes

root用户设置登录密码

sudo passwd root

sudo systemctl restart sshd.service ssh.service

退出登录终端,使用 root用户登录

下载必要依赖

  1. 切换国内镜像源
sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list
  1. 更新 apt 厂库
apt update -y 
  1. 安装依赖包
apt install vim bash-completion command-not-found git socat conntrack ebtables  ethtool ipset ipvsadm selinux-utils chrony -y

使用 kubekey 安装 k8s

使用清华镜像安装 docker

export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
# 如您使用 curl
curl -fsSL https://get.docker.com/ | sh
# 如您使用 wget
wget -O- https://get.docker.com/ | sh

kubekey 官方文档https://github.com/kubesphere/kubekey/blob/master/README_zh-CN.md

export KKZONE=cn   # 设置区域为国内
setenforce 0 #切换成宽容模式
curl -sfL https://get-kk.kubesphere.io | sh -   #下载 kk
./kk create cluster --skip-pull-images --with-local-storage  -y  #安装 k8s 集群

安装问题

如果安装过程中,出现如下错误:

删除 /etc/containerd/config.toml 文件并重启 containerd 即可。

mv /etc/containerd/config.toml /root/config.toml.bak
systemctl restart containerd

k8s 节点

介绍

  • k8s 集群节点分为 master nodework node 两类,其中 master node 是控制的、work node是干活的

  • 注意其中的几条单向线。work node中只有 kebletmaster_node 有联系。与 etcd连接的只有api_server。与 kubectl 相连的只有api_server

核心组件

什么是组件?组件就是运行在服务器上的进程

  • etcd: 保存了整个集群的状态

  • apiServer:资源操作的唯一接口

  • controller manager: 维护集群状态,比如故障检测、自动扩展、滚动更新等

  • scheduler: 负责资源调度,按照预订的调度策略,将 pod 调度到响应的机器上;

  • kubelet: 负责维护容器的生命周期

  • kube-proxy: 负责为 Service 提供cluster内部的服务发现和负载均衡;

pod 创建流程

注意:

  1. 只有 etcd 是有状态的,其他组件均是无状态
  2. 各个组件和 apiServer 之间都是通过 list-watch 来实现的
  3. kubelet 是直接安装在宿主机上的,而 kube-porxy 是运行在 docker 中的

pod

pod 基础概念

添加新的node节点

minikube node add

kubectl get nodes # 查看新节点是否创建成功

查看 kube-system 命名空间下的所有节点

kubectl -n kube-system get pods         # 查看指定命名空间下的 pod 信息
kubectl -n kube-system get pods -o wide # 系统组件的详细信息
kubectl -n kube-system get pods -o yaml # 系统组件的更为详细信息


kubectl get pods --all-namespaces       # 查看所有命名空间下的 pod 信息
# 或
kubectl get pods -A       # 查看所有命名空间下的 pod 信息

kubectl get ns # 查看所有的命名空间


注意: 查询结果没有 kubelet,这是因为 kubelet 是以系统进程的方式运行在节点上的,而不是运行在pod中

区分组件和资源

  • 组件是为 k8s运行,安装好软件
  • 资源是去使用 k8s 能力的定义

查看 k8s 资源的命令

kubectl api-resources  # 查看所有资源
 kubectl api-versions  # 查看 api 版本

通过如上信息可以看出,nodespods 都是 k8s的资源;但 nodes 不属于namespaced, pods属于命名空间。

为什么要引入 Pod

  • k8s集群中,最小的调度单元就是 Pod(豆荚)
  • 在同一个 Pod 中,多容器共享网络空间、进程空间、存储空间。使用的是 dockercontainer 模式,即新起的容器会和已有的容器共享一个网络空间。因此同一个 pod 中的服务,都可以通过 localhost 进行相互访问。
  • 对于使用的 pod,使用 yaml 文件定义的 资源清单

参考文献

https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/nd7yOvdY
https://www.cnblogs.com/along21/p/10297756.html
https://www.bilibili.com/video/BV1Dd4y1i7jq/?share_source=copy_web&vd_source=80cf96a12f63a1720dfc645c2eb041c0
https://www.cnblogs.com/immaxfang/p/16721407.html

posted @ 2023-10-06 21:39  沧海一声笑rush  阅读(27)  评论(0编辑  收藏  举报