Centos7 搭建 k8s(v1.28)环境以及架构简介

2023-12-31  本文已影响0人  wayyyy

重要的概念

搭建之前我们先理解几个概念:

Cluster

Cluster 是计算,网络,存储资源的集合。

Master

Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行,为了实现高可用,可以运行多个Master。

Node

Node 的职责是运行容器的应用,Node 由 Master 管理,Node 负责监控并汇报容器的状态,同时根据Master 的要求管理容器的生命周期。

Pod

Pod 是 k8s 的最小工作单元,每个Pod包含了一个或多个容器,Pod 中的容器会作为一个整体备 Master 调度到一个Node上运行。

Controller
Service
Namespace

部署k8s

计划部署3节点的k8s cluster,部署模型如图:

image.png

viros1 作为 master,viros2 和 viros3 作为剩下的节点。

安装docker

所有节点上都需要安装docker。这里参见:docker-ce 的安装与卸载

注意,安装完成后,还需要,修改docker-ce默认配置为systemd,以及修改为国内官方镜像源。

# cat > /etc/docker/daemon.json << EOF 
{
  "storage-driver": "overlay2",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
EOF

# systemctl restart docker
一些配置

所有节点,需要执行:

添加ali k8s repo 源
# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# yum makecache
安装kubelet,kubeadm ,kubectl

kubelet 运行在cluster所有节点上,负责启动Pod和容器,kubeadm 用于初始化 cluster,kubectl 是 k8s 的命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新各种组件。

# yum install kubelet kubeadm kubectl
# systemctl enable kubelet 
用 kubeadm 创建 cluster

如果想重新初始化则执行:kubeadm reset

下面开始初始化cluster:

kubeadm init \
--apiserver-advertise-address=192.168.48.20 
--image-repository registry.aliyuncs.com/google_containers

遇到报错:


image.png

然后参考:https://www.cnblogs.com/xlei/p/16999271.html 执行命令解决:

# rm -rf /etc/containerd/config.toml 
# systemctl restart containerd

继续报错:


image.png

这是因为国内连接不上registry.k8s.io,因为我有proxy,所以修改 /usr/lib/systemd/system/containerd.service ,加上proxy:

[Service]
Environment="http_proxy=http://192.168.48.1:7890"
Environment="https_proxy=http://192.168.48.1:7890"
...
image.png

再执行:systemctl daemon-reload && systemctl restart containerd

kubeadm init 之后:


image.png

master 节点编辑/etc/profile,加入:

export KUBECONFIG=/etc/kubernetes/admin.conf

再执行source /etc/profile

再再俩从节点上执行:

kubeadm join 192.168.48.20:6443 --token o5t82v.8zvsvsc273meng2y \
    --discovery-token-ca-cert-hash sha256:7192b77a8696565ace34a6d6a8f03303d1debafe70d543529af899fab6c52138

如果不小心清屏,那么可以再执行 kubeadm token create --print-join-command 查看token。

此时,我们3个节点集群已经初步ok,再master节点上执行kubectl get nodes,可以查看:

image.png
master 节点配置网络,使用Calico
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O

编辑 calico.yaml 文件,如图所示,新增加:

- name: IP_AUTODETECTION_METHOD
  value: "interface=ens33"
image.png

ens33 为 192.168.48.20 所在的网卡

执行:

# kubectl apply -f calico.yaml

部署的时候calico 一直报奇奇怪怪的错误,好像是去连接了代理去通信,把上面步骤 /usr/lib/systemd/system/containerd.service 中加入的proxy注释掉后,calico 安装成功。


image.png
k8s contaired docker 之前的关系

查看node上的所使用的container runtime:


image.png

我这里安装的k8s 是v1.28.4 版本,已经将容器运行时改为 contaired(不是docker),所以这么多pod在运行,我输入 docker ps 却看不到一个在运行的容器,那么怎么查看contaired上运行的容器呢?

# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
# crictl ps
image.png

所以,再回来审视我们的安装步骤,理论上来说已经不需要安装docker了,而是需要安装 contaired,但是安装docker 好像会安装上contaired。

关于 k8s docker contaired 关系可以查看:https://zhuanlan.zhihu.com/p/494054143


运行一个demo

创建Namespace:

# cat > ns-nginx.yml << EOF
apiVersion: v1
kind: Namespace
metadata:
  name: nginx
  labels:
    name: nginx

EOF

# kubectl create -f ns-nginx.yml

查看刚才创建的命名空间:

# kubectl get namespaces
image.png

部署nginx 应用

# cat > nginx.yml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment1
  namespace: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx-demo
        image: nginx:1.14.0
        ports:
        - containerPort: 80
      
EOF

# kubectl create -f nginx.yml

查看 namesapce 为nginx 下的 pods

# kubectl get pods -n nginx
image.png

查看我们定义的deployment

# kubectl get deployment -n nginx
image.png

在上面我们定义了2个副本,执行如下命令课查看pod分别被调度到了哪些节点上。

kubectl get pods -n nginx -o wide
image.png

卸载k8s

TODO

k8s 架构组成简介


参考资料
1、https://learnku.com/docs/go-micro-build/1.0/kubernetes-1804-cluster-installation-tutorial-based-on-centos7/8877
2、https://www.cnblogs.com/Fzeng/p/17288286.html
3、http://123.57.207.179/article_detail/1646098660465628
4、https://blog.csdn.net/axibazZ/article/details/119301373

上一篇 下一篇

猜你喜欢

热点阅读