kubectl基础操作实战-k8s集群安装
专栏介绍
作者与平台
作者:庸子
用户ID:2401_86478612
第一发表平台:CSDN
欢迎来到《Kubernetes架构师之路:系统化学习与实践》专栏!在这个容器化技术主导的时代,Kubernetes已成为云原生应用编排的事实标准,掌握Kubernetes已成为每位开发者和运维工程师的必备技能。
本专栏采用系统化学习方法,从基础概念到高级实践,循序渐进地带您全面掌握Kubernetes技术栈。无论您是刚接触容器技术的初学者,还是希望深入理解Kubernetes架构的资深工程师,这里都将为您提供清晰的学习路径和实用的实战指导。
您将学到什么?
- 基础理论:深入理解容器、容器编排、Kubernetes核心概念和架构设计
- 核心组件:掌握etcd、API Server、Controller Manager、Scheduler等核心组件的工作原理
- 资源管理:学会Pod、Deployment、Service、Ingress等核心资源的创建与管理
- 网络与存储:理解Kubernetes网络模型和存储方案,解决实际部署中的网络与存储问题
- 高可用与扩展:构建高可用的Kubernetes集群,实现应用的自动扩展与故障恢复
- 监控与日志:掌握集群监控、日志收集与应用性能优化方法
- CI/CD集成:学习如何将Kubernetes与CI/CD流程结合,实现自动化部署
- 安全实践:了解Kubernetes安全模型,掌握RBAC、网络策略等安全配置
学习特色
- 系统化知识体系:从零开始,构建完整的Kubernetes知识框架
- 实战导向:每个知识点都配有实际操作案例,让您"学以致用"
- 问题驱动:针对实际部署中常见的问题提供解决方案
- 最新版本覆盖:基于最新稳定版Kubernetes,紧跟技术发展趋势
- 架构师视角:不仅教您"如何做",更解释"为什么这样设计"
无论您是想提升个人竞争力,还是为企业构建高效的云原生基础设施,本专栏都将助您成为真正的Kubernetes专家。让我们一起开启这段激动人心的Kubernetes学习之旅!
立即订阅,开启您的Kubernetes架构师成长之路!
环境准备与基础配置
系统环境Red hat 9.4
主机网段192.168.10.0/24
实验主机
192.168.10.10 master
192.168.10.20 worker01
192.168.10.30 worker02
其中192.168.10.10作为控制平面192.168.10.20,192.168.10.30作为工作节点
基础配置
修改主机名称
修改master节点主机名称
hostnamectl set-hostname master
修改node节点主机名称
hostnamectl set-hostname worker01
修改node节点主机名称
hostnamectl set-hostname worker02
执行bash命令让配置生效
修改主机本地hosts文件
cat >> /etc/hosts << "EOF"
192.168.10.10 master
192.168.10.20 worker01
192.168.10.30 worker02
EOF
关闭防火墙
在实验环境我们为了方便关闭防火墙在生产环境当中我们应当为相对于的服务其设定相对于的防火墙规则
systemctl disable --now firewalld
关闭selinx
sed -ri 's#(SELINUX=)enforcing#\1disabled#' /etc/selinux/config
grep ^SELINUX= /etc/selinux/config
setenforce 0
getenforce
关闭swap交换分区
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
配置eopl源
cat >> /etc/yum.repos.d/epel.repo << "EOF"
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
[epel-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch/debug/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/source/tree/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1
EOF
缓存到本地
yum makecache
查看服务器时区
timedatectl
安装chrony
yum install -y chrony
修改chrony配置文件
vim /etc/chrony.conf
server ntp.aliyun.com iburst
allow 192.168.10.10/24 #本机IP/网段
启动服务设定开机自启动
systemctl enable chronyd --now
系统内核调优
修改最大文件打开数
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
修改syscat.conf内核参数
cat >> /etc/sysctl.comf << EOF
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 20480
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20
EOF
配置生效
sysctl -p
开启bridge网桥过滤和安装工具
安装基础工具
yum install -y gcc autoconf sysstat
配置内核参数
cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
加载内核模块
modprobe br_netfilter && lsmod | grep br_netfilter
生效内核参数
sysctl -p /etc/sysctl.d/k8s.conf
输出示例
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
安装docker
docker简介
Docker 是一个开源的应用容器引擎,用于开发、发布和运行应用程序。它允许开发者将应用程序及其所有依赖(库、配置文件、环境变量等)打包到一个轻量级、可移植的容器中,实现在任何支持 Docker 的环境中快速部署和运行。
下载yum-utils工具
yum install -y yum-utils
添加阿里docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
列出可以安装的docker版本
yum list docker-ce.x86_64 --showduplicates | sort -r
安装docker-ce社区版本
yum -y install docker-ce-27.2.0-1.el9
配置docker镜像加速源文件
cat >>/etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"dns": ["8.8.8.8", "114.114.114.114"],
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerpull.com",
"https://atomhub.openatom.cn",
"https://docker.1panel.live",
"https://docker.chenby.cn"
]
}
EOF
启动docker检查服务状态
重读配置文件
systemctl daemon-reload
设置docker开机自启动
systemctl enable docker
启动docker
systemctl start docker
重启docker
systemctl status docker
安装cri-docker
cri-docker简介
cri-dockerd是为了弥补Docker在Kubernetes中使用时的不足而开发的。自Kubernetes 1.24版本起,Kubernetes移除了对dockershim的支持,转而推荐使用Containerd作为默认的容器运行时。然而,许多用户仍希望继续使用Docker,因此cri-dockerd应运而生,作为Docker与Kubernetes之间的桥梁。
获取安装包
wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14.amd64.tgz
解压二进制包到/usr/local/bin/
tar -xvf cri-dockerd-0.3.14.amd64.tgz --strip-components=1 -C /usr/local/bin/
获取配置文件
wget -O /etc/systemd/system/cri-docker.service https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
wget -O /etc/systemd/system/cri-docker.socket https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket
修改配置文件
vim /etc/systemd/system/cri-docker.service
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --cri-dockerd-root-directory=/var/lib/docker
vim /etc/systemd/system/cri-docker.socket
ListenStream=/var/run/cri-dockerd.sock
重读配置文件
systemctl daemon-reload
设置cri-docker开机自启动
systemctl enable cri-docker.socket cri-docker.service
启动cri-docker
systemctl start cri-docker.service
安装k8s
配置k8s-repo源
cat >> /etc/yum.repos.d/k8s.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/repodata/repomd.xml.key
EOF
下载k8s核心组件
yum install -y kubelet kubeadm kubectl
指定了Kubelet使用的cgroup驱动为systemd
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
Kubelet开机自启动
systemctl enable kubelet.service
集群配置 以下操作在master节点执行
kubeadm config images list
kubeadm config print init-defaults > kubeadm-config.yaml
修改文件
vi kubeadm-config.yaml
按照如下修改参数
apiVersion: kubeadm.k8s.io/v1beta4
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.10.10 #修改为集群初始化的master节点IP地址
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock #高版本默认使用containerd,这里修改成使用dcoker
imagePullPolicy: IfNotPresent
imagePullSerial: true
name: master # 这里需要修改成master主入口节点的主机名
taints: null
timeouts:
controlPlaneComponentHealthCheck: 4m0s
discovery: 5m0s
etcdAPICall: 2m0s
kubeletHealthCheck: 4m0s
kubernetesAPICall: 1m0s
tlsBootstrap: 5m0s
upgradeManifests: 5m0s
---
apiServer: {}
apiVersion: kubeadm.k8s.io/v1beta4
caCertificateValidityPeriod: 87600h0m0s
certificateValidityPeriod: 8760h0m0s
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
encryptionAlgorithm: RSA-2048
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.k8s.io
kind: ClusterConfiguration
kubernetesVersion: 1.31.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
proxy: {}
scheduler: {}
初始化集群
kubeadm init --config kubeadm-config.yaml --upload-certs
输出化集群完成以后最后会输出
kubeadm join 192.168.10.10:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:45d94841c0c24a2f5734689fb90277ebf51e0753305334639f12f05dc32832384
这个命令我们先复制后面会用到
node节点加入集群
检查 cgroup 支持的文件系统类型
stat -fc %T /sys/fs/cgroup/
禁止kubelet在检测到swap被启用时失败
echo 'KUBELET_EXTRA_ARGS="--fail-swap-on=false"' > /etc/default/kubelet
重启 kubelet 服务 以应用上述配置更改
systemctl restart kubelet
加入集群
kubeadm join 192.168.10.10:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:45d94841c0c24a2f5734689fb90277ebf51e0753305334639f12f05dc32832384 --cri-socket=unix:///var/run/cri-dockerd.sock
增加一行内容指定docker为容器运行时 --cri-socket=unix:///var/run/cri-dockerd.sock 添加在命令最后
配置集群网络Calico 部署在master执行
获取yaml文件
wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml --no-check-certificate
应用yaml文件
kubectl apply -f calico.yaml
查看
kubectl get -f calico.yaml
配置 Master 节点的 kubectl
创建 .kube 目录
mkdir -p $HOME/.kube
将 Kubernetes 管理员配置文件 (admin.conf) 复制到 .kube/config
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
修改配置文件的所有者和组为当前用户和用户组
chown $(id -u):$(id -g) $HOME/.kube/config
确保 kubelet 开机自启并立即启动
systemctl enable --now kubelet
检查集群状态
kubectl get nodes
kubectl get pod -A
kubctl命令补全
echo "source <(kubectl completion bash)" >> ~/.bash_profile
source .bash_profile
启用ipvs
下载基础工具
yum -y install ipvsadm
修改文件
kubectl edit configmaps -n kube-system kube-proxy
修改mode字段
mode:“ipvs” 默认为空添加ipvs
到此集群部署完成