k8s折腾笔记

k8s折腾笔记

k8s安装、部署、运行demo

1.系统环境

两台服务器,都是ubuntu22版本,

一台2核4g,作为master节点

一台2核2g,作为worker节点

两台机器都需要先安装好docker

两台都需要在安全组或者防火墙处开放端口

Master 节点:

TCP: 6443 (Kubernetes API)

TCP: 2379-2380 (etcd)

TCP: 10250 (kubelet)

Worker 节点:

TCP: 10250 (kubelet)

TCP: 30000-32767 (NodePort 服务)

2.开始安装

2.1 先从master节点开始

确保每台机器有唯一的主机名,例如:

Master 节点:master

Worker 节点:worker

bash 复制代码
hostnamectl set-hostname master  # 在 Master 上执行
hostnamectl set-hostname worker  # 在 Worker 上执行

禁用 Swap

bash 复制代码
sudo swapoff -a

配置 /etc/hosts 文件,添加两台机器的 IP 和主机名映射

这里是我的ip地址,内网,也可以直接改为你的公网ip

bash 复制代码
192.168.*.* master
192.168.*.* worker

运行以下命令进行安装,以下来自官网

更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
下载用于 Kubernetes 软件包仓库的公共签名密钥。所有仓库都使用相同的签名密钥,因此你可以忽略URL中的版本:
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
添加 Kubernetes apt 仓库。 请注意,此仓库仅包含适用于 Kubernetes 1.31 的软件包; 对于其他 Kubernetes 次要版本,则需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本 (你还应该检查正在阅读的安装文档是否为你计划安装的 Kubernetes 版本的文档)。

# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

运行完成命令之后你现在应该有了初步的环境,

之后执行

bash 复制代码
kubeadm init

然后k8s会提示你进行以下设置

bash 复制代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

使用下面这条命令获取加入集群的密钥

bash 复制代码
kubeadm token create --print-join-command

初始化后,必须安装一个网络插件(如 Flannel 或 Calico)才能使 Pod 通信正常。以 Flannel 为例:

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml```

之后,输入下面这段命令便可以查看集群节点

bash 复制代码
kubetcl get nodes 
kubectl get pods -n kube-system

2.2 worker节点

配置 /etc/hosts 文件,添加两台机器的 IP 和主机名映射

bash 复制代码
192.168.*.* master
192.168.*.* worker

运行以下命令进行安装,以下来自官网

更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
下载用于 Kubernetes 软件包仓库的公共签名密钥。所有仓库都使用相同的签名密钥,因此你可以忽略URL中的版本:
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
添加 Kubernetes apt 仓库。 请注意,此仓库仅包含适用于 Kubernetes 1.31 的软件包; 对于其他 Kubernetes 次要版本,则需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本 (你还应该检查正在阅读的安装文档是否为你计划安装的 Kubernetes 版本的文档)。

# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

然后执行

从master节点处返回的命令加入节点,之后,你就可以在master处看见它们了

bash 复制代码
kubeadm join 10.3.4.4:6443 --token dqwbkx.max1******* --discovery-token-ca-cert-hash sha256:87c13dfb43e27de3afd8e0c8e62a8fc742**********

到处,应该算连接完成了,下面讲一讲会遇到的问题,

3.遇到的问题

这是在worker节点执行了安装网络插件的错误,应该是在master节点上执行,萌新错误(例如我)

两种情况,第一种,master节点的网络插件没安装,第二种,在etc/hosts的ip配置失效

执行加入节点的命令需要root权限

其实遇到最多的就是各种源的安装错误,参考网络上的教程会出现各种提示密钥过期,apt等等问题,最好是参考官方的网站上设置源

如果遇到无法下载这些问题,可以考虑设置一个国内的镜像源

4.集群demo

实验目标:使用k8s部署一个三个pod的nginx集群

步骤 1: 创建一个 NGINX 部署

创建一个 YAML 文件,例如 nginx-deployment.yaml,内容如下:

bash 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

应用这个部署文件:

bash 复制代码
kubectl apply -f nginx-deployment.yaml

检查部署状态:

bash 复制代码
kubectl get deployments
kubectl get pods

步骤 2: 暴露 NGINX 服务

创建一个 Service,以便对外暴露 NGINX。

创建一个 YAML 文件,例如 nginx-service.yaml,内容如下:

bash 复制代码
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30007
  type: NodePort

应用这个服务文件:

bash 复制代码
kubectl apply -f nginx-service.yaml

检查服务状态:

bash 复制代码
kubectl get services

输出应该包含类似以下的内容:

bash 复制代码
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
nginx-service   NodePort   10.96.243.127    <pending>     80:30290/TCP   10s

其中 nodePort 是 Kubernetes 在节点上暴露的端口,可以选定范围在 30000-32767 之间。

bash 复制代码
kubectl apply -f nginx-service.yaml

现在可以通过公网ip地址访问啦!

不管是master节点的地址还是worker节点的地址都可以

相关推荐
Pandaconda19 分钟前
【Golang 面试题】每日 3 题(三十九)
开发语言·经验分享·笔记·后端·面试·golang·go
l1x1n032 分钟前
No.35 笔记 | Python学习之旅:基础语法与实践作业总结
笔记·python·学习
颜淡慕潇4 小时前
【K8S系列】在 K8S 中使用 Values 文件定制不同环境下的应用配置
云原生·容器·kubernetes·环境配置
旦沐已成舟4 小时前
K8S-Pod的环境变量,重启策略,数据持久化,资源限制
java·docker·kubernetes
github_czy4 小时前
(k8s)k8s部署mysql与redis(无坑版)
redis·容器·kubernetes
超级阿飞4 小时前
利用Kubespray安装生产环境的k8s集群-实施篇
elasticsearch·容器·kubernetes
dal118网工任子仪6 小时前
66,【6】buuctf web [HarekazeCTF2019]Avatar Uploader 1
笔记·学习
羊小猪~~7 小时前
MYSQL学习笔记(四):多表关系、多表查询(交叉连接、内连接、外连接、自连接)、七种JSONS、集合
数据库·笔记·后端·sql·学习·mysql·考研
milk_yan8 小时前
Docker集成onlyoffice实现预览功能
前端·笔记·docker
东京老树根8 小时前
Excel 技巧15 - 在Excel中抠图头像,换背景色(★★)
笔记·学习·excel