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
国内使用 KubeKey
在 ubuntu22.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
用户登录
下载必要依赖
- 切换国内镜像源
sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list
- 更新 apt 厂库
apt update -y
- 安装依赖包
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 node
和work node
两类,其中master node
是控制的、work node
是干活的 -
注意其中的几条单向线。
work node
中只有keblet
和master_node
有联系。与etcd
连接的只有api_server
。与kubectl
相连的只有api_server
核心组件
什么是组件?组件就是运行在服务器上的进程
-
etcd
: 保存了整个集群的状态 -
apiServer
:资源操作的唯一接口 -
controller manager
: 维护集群状态,比如故障检测、自动扩展、滚动更新等 -
scheduler
: 负责资源调度,按照预订的调度策略,将 pod 调度到响应的机器上; -
kubelet
: 负责维护容器的生命周期 -
kube-proxy
: 负责为 Service 提供cluster内部的服务发现和负载均衡;
pod 创建流程
注意:
- 只有
etcd
是有状态的,其他组件均是无状态 - 各个组件和
apiServer
之间都是通过list-watch
来实现的 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 版本
通过如上信息可以看出,nodes
和 pods
都是 k8s
的资源;但 nodes
不属于namespaced
, pods
属于命名空间。
为什么要引入 Pod
- 在
k8s
集群中,最小的调度单元就是Pod
(豆荚) - 在同一个
Pod
中,多容器共享网络空间、进程空间、存储空间。使用的是docker
的container
模式,即新起的容器会和已有的容器共享一个网络空间。因此同一个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