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、网络策略等安全配置

学习特色

  1. 系统化知识体系:从零开始,构建完整的Kubernetes知识框架
  2. 实战导向:每个知识点都配有实际操作案例,让您"学以致用"
  3. 问题驱动:针对实际部署中常见的问题提供解决方案
  4. 最新版本覆盖:基于最新稳定版Kubernetes,紧跟技术发展趋势
  5. 架构师视角:不仅教您"如何做",更解释"为什么这样设计"

无论您是想提升个人竞争力,还是为企业构建高效的云原生基础设施,本专栏都将助您成为真正的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

到此集群部署完成

相关推荐
企鹅侠客2 小时前
2 安装 Docker 和 Jenkins:持续构建环境起步
docker·容器·jenkins·持续构建环境部署
坐望云起4 小时前
Hyper-V + Centos stream 9 搭建K8s集群(二)
linux·kubernetes·centos
only_Klein12 小时前
K8S部署ELK(五):集成Kibana实现日志可视化
elk·容器·kubernetes
G皮T14 小时前
【云计算】云主机的亲和性策略(三):云主机 & 宿主机
阿里云·云原生·云计算·虚拟化·云服务器·云主机·弹性计算
❀͜͡傀儡师15 小时前
Docker 安装部署 OceanBase
docker·容器·oceanbase
我能知道个啥18 小时前
一次Kubernetes集群故障处理案例:etcd无法选出Leader导致Kubernetes API-Server启动失败
kubernetes
JuiceFS18 小时前
JuiceFS on Windows: 首个 Beta 版的探索与优化之路
后端·云原生·云计算
David爱编程18 小时前
Cilium 与 Calico 网络安全能力横向评测
云原生·容器·kubernetes