Kubernetes (k8s) 安装与基本应用指南 - Rocky Linux
一、
本指南将介绍在 Rocky Linux 上安装 Kubernetes 集群并部署基本应用的完整流程。
前提条件
- 至少两台 Rocky Linux 9 服务器(1 个控制平面节点,1 个工作节点)
- 每台服务器至少 2GB RAM 和 2 个 CPU 核心
- 所有节点之间的网络连接
- sudo 或 root 权限
第一部分:安装准备
1. 单机开发环境安装 (Minikube)在所有节点上执行以下操作
1.1设置主机名和 安装前提
hosts 2核以上CPU2GB以上内存20GB磁盘空间已安装Docker或虚拟机驱动
1.2 安装步骤文件
# 安装kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"控制平面节点
sudo installhostnamectl -oset-hostname root -g root -m 0755 kubectl /usr/local/bin/kubectlk8s-master
# 安装Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64工作节点
sudo installhostnamectl minikube-linux-amd64set-hostname /usr/local/bin/minikubek8s-worker1
# 启动集群编辑 minikube/etc/hosts start文件(在所有节点上)
--driver=dockersudo #vi 验证安装
kubectl get nodes/etc/hosts
2.
添加如下内容(根据实际 生产环境安装IP (kubeadm)修改):
192.168.1.100 k8s-master
192.168.1.101 k8s-worker1
2.1禁用 所有节点准备工作SELinux 和防火墙
#sudo 关闭swapsetenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo systemctl disable --now firewalld
禁用交换空间
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
#
加载内核模块
sudo modprobe overlay
sudo apt-getmodprobe updatebr_netfilter
sudocat apt-get install -y docker.io
sudo systemctl enable docker
# 安装kubeadm, kubelet和kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main"<<EOF | sudo tee /etc/apt/sources.list.modules-load.d/kubernetes.listk8s.conf
overlay
br_netfilter
EOF
cat <<EOF | sudo apt-gettee update/etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo apt-getsysctl --system
第二部分:安装容器运行时和 Kubernetes
2. 安装容器运行时(containerd)
# 安装依赖
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 containerd
sudo dnf install -y containerd.io
# 配置 containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# 修改配置文件启用 systemd cgroup 驱动
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 启动并启用 containerd
sudo systemctl enable --now containerd
3. 安装 Kubernetes 组件
# 添加 Kubernetes 仓库
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
# 安装 kubelet, kubeadm 和 kubectl
sudo dnf install -y kubelet kubeadm kubectl sudo--disableexcludes=kubernetes
apt-mark# hold启动并启用 kubelet
kubeadmsudo kubectlsystemctl enable --now kubelet
2.2 主节点第三部分:初始化
Kubernetes 集群
4. 在控制平面节点上初始化集群
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 按照提初始化完成后会显示加入集群的命令,类似:
# kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash <hash>
5. 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.36. 安装网络插件
(Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.47. 加入将工作节点
加入集群
在主工作节点上运行控制平面初始化完成后会显示加入命令,类似:
kubeadm join
<master-ip>:6443命令。第四部分:验证集群
8. 检查节点状态
kubectl get nodes
9. 检查所有 pod 状态
kubectl get pods --
token <token> --discovery-token-ca-cert-hash <hash>all-namespaces
二、Kubernetes第五部分:部署基本应用
1.10. 部署第一个Nginx 示例应用
1.1# 创建
Deploymentdeployment kubectl create deployment nginx --image=
nginx:1.19nginx服务
1.2# 暴露Servicekubectl expose deployment nginx --port=80 --type=NodePort # 获取服务信息 kubectl get svc nginx
1.311. 访问应用
使用
kubectl get
servicessvc#nginx使用输出的NodePort访NodePort 端口访问,如Nginx 服务。常见问题解决
节点 NotReady 状态:
curl
http://<node-ip>:<node-port>- 检查网络插件是否安装正确
2.kubelet 使用YAML文件部署
2.1 创建deployment.yaml
日志:apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:journalctl -u name: nginx
image: nginx:1.19
ports:
- containerPort: 80
2.2 创建service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
2.3 应用配置
kubectl applykubelet -f
Pod service.yaml一直处于 Pending
:3.状态
# 检查看资源状态
kubectl get pods
kubectl get deployments
kubectl get services
# 查看详细信息
是否足够:kubectl describe pod <pod-name>
# 检查看日志
kubectl logs <pod-name>
# 进入容器
kubectl exec -it <pod-name> -- /bin/bash
# 扩展副本数
kubectl scale deployment nginx-deployment --replicas=5
# 更新镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.20
# 回滚更新
kubectl rollout undo deployment/nginx-deployment
三、核心概念实践
1. ConfigMap 使用
1.1 创建ConfigMap
节点是否有污点:kubectl createdescribe configmapnode app-config| --from-literal=APP_COLOR=bluegrep --from-literal=APP_MODE=prodTaint
kubeadm init 失败:
- 重置集群:
sudo kubeadm reset
- 检查容器运行时是否正常运行
1.2
env:
2. Secret 使用
2.1 创建Secret
kubectl create secret generic db-secret --from-literal=DB_USER=root --from-literal=DB_PASSWORD=password
2.2 在Pod中使用
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: DB_PASSWORD
3. Volume 使用
volumes:
- name: data-volume
emptyDir: {}
containers:
- name: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: data-volume
四、生产环境建议后续步骤
资源限制:为容器设置requests和limits安装 Kubernetes 仪表板健康检查:配置liveness和readiness探针持久化存储HPA:设置自动扩缩容Ingress 控制器命名空间:使用namespace隔离环境网络策略:限制Pod间网络访问RBAC:配置基于角色的访问监控制
五、常用工具
k9s:终端UI管理工具brew install k9sLens:Kubernetes IDEHelm:Kubernetes包管理工具curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
通过以上步骤,您已经完在 Rocky Linux 上成功部署了Kubernetes的安装并掌握了一个基本的 Kubernetes 集群并运行了第一个应用方法。接下来可以探索更高级的功能如StatefulSet、DaemonSet、Operator等。