K8S安装部署攻略

什么是K8S?

一、K8S的核心功能

  1. 自动部署、扩展和管理容器化应用程序:K8S能够自动化地部署、扩展和管理容器化应用程序,简化运维工作。
  2. 服务发现与负载均衡:K8S提供了服务发现和负载均衡功能,使得用户无需修改应用程序即可使用这些机制。
  3. 存储编排:K8S能够自动挂载所选存储系统,包括本地存储,实现存储资源的灵活管理。
  4. Secret和配置管理:K8S允许用户在不重建容器镜像的情况下更新应用配置和密钥,提高了敏感数据的安全性。
  5. 批量执行:除了服务之外,K8S还可以管理批处理和CI工作负载,在需要时替换掉失效的容器。

二、K8S的集群架构

K8S遵循主从架构模式,一个K8S集群由至少一个主节点(Master Node)和多个工作节点(Worker Node)组成。

  1. 主节点(Master Node):负责集群的管理和调度。主节点包含API服务器、调度器、控制管理器和etcd(用于存储集群配置的键值数据库)等核心组件。

    • API服务器:K8S的请求入口服务,负责接收来自UI界面或CLI命令行工具的请求,并根据请求通知其他组件执行操作。
    • 调度器:负责选择最合适的Worker Node来部署Pod。
    • 控制管理器:监控和调整在Worker Node上部署的服务的状态,确保服务的正常运行。
    • etcd:存储K8S的关键配置和用户配置,只有API服务器具备读写权限。
  2. 工作节点(Worker Node):运行实际的应用容器。每个工作节点都有Kubelet(与主节点通信的代理)、容器运行环境(如Docker或rkt)和kube-proxy(处理节点内部的网络通信)等组件。

    • Kubelet:Worker Node的监视器,以及与Master Node的通讯器。它会定期向Master Node汇报自己Node上运行的服务的状态,并接受来自Master Node的指示采取调整措施。
    • kube-proxy:K8S的网络代理,负责Node在K8S的网络通讯以及对外部网络流量的负载均衡。
    • 容器运行环境:安装了容器化所需的软件环境,确保容器化程序能够运行。

三、K8S的设计理念

  1. 容错性:保证K8S系统稳定性和安全性的基础。
  2. 易扩展性:保证K8S对变更友好,可以快速迭代增加新功能的基础。

四、K8S的应用场景

K8S非常适用于各种应用和环境,从小型个人项目到大型企业级应用,尤其是当需要高可用性、扩展性和无缝的更新时。它支持声明式配置和自动化,使系统管理员和开发者可以更轻松地部署和管理应用。

综上所述,K8S是一个功能强大、灵活且易于扩展的容器编排平台,它能够帮助用户简化和自动化容器化应用程序的部署、扩展和管理。

K8S的部署

一.环境准备 

我是用两台虚拟机(rhel9),一台172.25.254.10用来部署加密认证仓库,另一台172.25.254.200用来登录这个仓库来上传镜像,然后进行docker部署。

二.部署docker 

可查看下面博客 

 docker入门详解icon-default.png?t=O83Ahttps://blog.csdn.net/HUHUD521/article/details/142664052

三.实战操作

1.所有节点设定docker的资源管理模式为systemd

[root@k8s-master ~]# vim /etc/docker/daemon.json
 {
 "registry-mirrors": ["https://reg.timinglee.org"],
 "exec-opts": ["native.cgroupdriver=systemd"],
 "log-driver": "json-file",
 "log-opts": {
 "max-size": "100m"
 },
 "storage-driver": "overlay2"
 }

 

2.所有阶段复制harbor仓库中的证书并启动docker 

[root@k8s-master ~]# ls -l /etc/docker/certs.d/reg.timinglee.org/ca.crt
[root@k8s-master ~]# systemctl enable --now docker
[root@k8s-master ~]# docker login reg.timinglee.org
 [root@k8s-master ~]# docker info
 Client: Docker Engine - Community
 Version:    
27.1.2
 Context:    
default
 Debug Mode: false
 Plugins:
 buildx: Docker Buildx (Docker Inc.)
 Version:  v0.16.2
 Path:     
/usr/libexec/docker/cli-plugins/docker-buildx
 compose: Docker Compose (Docker Inc.)
 Version:  v2.29.1
 Path:     
Server:
 Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
 Images: 0
 Server Version: 27.1.2
 Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Using metacopy: false
 Native Overlay Diff: true
 userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd         
/usr/libexec/docker/cli-plugins/docker-compose
 #资源管理更改为systemd
 Cgroup Version: 2
 Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 8fc6bcff51318944179630522a095cc9dbf9f353
 runc version: v1.1.13-0-g58aa920
 init version: de40ad0
 Security Options:
 seccomp
 Profile: builtin
 cgroupns
 Kernel Version: 5.14.0-427.13.1.el9_4.x86_64
 Operating System: Red Hat Enterprise Linux 9.4 (Plow)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 736.3MiB
 Name: k8s-master.timinglee.org
 ID: f3c291bf-287d-4cf6-8e69-5f21c79fa7c6
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
 127.0.0.0/8
 Registry Mirrors:
 https://reg.westos.org/           
Live Restore Enabled: false

 

 3.安装K8S部署工具

[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo
 [k8s]
 name=k8s
 baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm
 gpgcheck=0
[root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y

 4.设置kubectl命令补齐功能

[root@k8s-master ~]# dnf install bash-completion -y
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master ~]# source  ~/.bashrc

 

5.在所节点安装cri-docker 

k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker 软件下载: 软件下载icon-default.png?t=O83Ahttps://github.com/Mirantis/cri-dockerd 

 [root@k8s-master ~]# dnf install libcgroup-0.41-19.el8.x86_64.rpm \
 > cri-dockerd-0.3.14-3.el8.x86_64.rpm -y
[root@k8s-master ~]# vim /lib/systemd/system/cri-docker.service
 [Unit]
 Description=CRI Interface for Docker Application Container Engine
 Documentation=https://docs.mirantis.com
 After=network-online.target firewalld.service docker.service
 Wants=network-online.target
 Requires=cri-docker.socket
 [Service]
 Type=notify
 #指定网络插件名称及基础容器镜像
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network
plugin=cni --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9
 ExecReload=/bin/kill -s HUP $MAINPID
 TimeoutSec=0
 RestartSec=2
 Restart=always
 [root@k8s-master ~]# systemctl daemon-reload
 [root@k8s-master ~]# systemctl start cri-docker
 [root@k8s-master ~]# ll /var/run/cri-dockerd.sock
 srw-rw---- 1 root docker 0  8月 26 22:14 /var/run/cri-dockerd.sock       
dockerd的套接字文件

6.在master节点拉取K8S所需镜像 


[root@k8s-master ~]# kubeadm config images pull \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.30.0 \--cri-socket=unix:///var/run/cri-dockerd.sock
[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \
| awk -F "/" '{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'
[root@k8s-master ~]# docker images  | awk '/k8s/{system("docker push "$1":"$2)}'   

 

 7.集群初始化

#启动kubelet服务
[root@k8s-master ~]# systemctl status kubelet.service
 #执行初始化命令
[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \--image-repository reg.timinglee.org/k8s \--kubernetes-version v1.30.0 \--cri-socket=unix:///var/run/cri-dockerd.sock
 #指定集群配置文件变量
[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> 
~/.bash_profile
 #当前节点没有就绪,因为还没有安装网络插件,容器没有运行
[root@k8s-master ~]# kubectl get node
 NAME                       
STATUS     
k8s-master.timinglee.org   
NotReady   
ROLES           
root@k8s-master ~]# kubectl get pod -A
 NAMESPACE     
NAME                                               
RESTARTS   
kube-system   
0          
kube-system   
0          
kube-system   
0          
kube-system   
0          
kube-system   
0          
AGE
 coredns-647dc95897-2sgn8                           
6m13s
 6m13s
 coredns-647dc95897-bvtxb                           
control-plane   
etcd-k8s-master.timinglee.org                      
6m29s
 kube-apiserver-k8s-master.timinglee.org            
6m30s
 AGE     
4m25s   
kube-controller-manager-k8s-master.timinglee.org   
VERSION
 v1.30.0
 READY   
0/1     
0/1     
1/1     
1/1     
1/1     
STATUS    
Pending 
Pending 
Running 
Running 
Running 
6m29s
kube-system   
0          
kube-system   
0          
kube-proxy-fq85m                                   
6m14s
 1/1     
Running 
kube-scheduler-k8s-master.timinglee.org            
6m29s
 Note
在此阶段如果生成的集群token找不到了可以重新生成
1/1     
Running 
[root@k8s-master ~]#   kubeadm token create --print-join-command
 kubeadm join 172.25.254.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery
token-ca-cert-hash 
sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23

 

 8.安装flannel网络插件

官方下载icon-default.png?t=O83Ahttps://github.com/flannel-io/flannel 

 #下载flannel的yaml部署文件
[root@k8s-master ~]# wget https://github.com/flannel
io/flannel/releases/latest/download/kube-flannel.yml
 #下载镜像:
[root@k8s-master ~]# docker pull docker.io/flannel/flannel:v0.25.5
 [root@k8s-master ~]# docekr docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1
 #上传镜像到仓库
[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 \
 reg.timinglee.org/flannel/flannel:v0.25.5
 [root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel:v0.25.5
 [root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 \
 reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
 [root@k8s-master ~]# docker push reg.timinglee.org/flannel/flannel-cni
plugin:v1.5.1-flannel1
 #编辑kube-flannel.yml 修改镜像下载位置
[root@k8s-master ~]# vim kube-flannel.yml
 173:        
184:        
#需要修改以下几行
[root@k8s-master ~]# grep -n image kube-flannel.yml
 146:        
image: reg.timinglee.org/flannel/flannel:v0.25.5
 image: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
 image: reg.timinglee.org/flannel/flannel:v0.25.5
 #安装flannel网络插件
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值