Kubernetes单机版部署

Kubernetes单机版部署


  • 前言

  • 准备配置

    • 服务器

    • 服务器配置

  • 安装K3S

  • 基本使用

    • 创建命名空间

    • 创建ConfigMap

    • 创建Deployment

    • 创建Service


前言

仅记录部署单机版K8S的流程,用于测试实验

  • K3S官网:https://docs.k3s.io/

准备配置

服务器

  • 系统:CentOS7.9
  • 配置:2CPUs/8GB/40GB/10M

部署K3S最低要求 1CPUs/512MB,推荐 2CPUs/1GB

服务器配置

安装Docker

#配置docker阿里云的yum源
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#
生成yum缓存
yum clean all && yum makecache

#
使用yum安装
yum install docker-ce -y

#
配置阿里云镜像仓库加速地址(阿里控制台获取个人加速地址)
mkdir -p /etc/docker

cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": ["https://gs41u9fe.mirror.aliyuncs.com"]
}
EOF

#
启动docker
systemctl start docker

#
查看状态
systemctl status docker

安装K3S

使用官网安装脚本,默认使用containerd运行容器,需要在后面加上-s --docker参数选择使用Docker(依据上文提前安装)

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --docker

#
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
# [INFO] Creating /usr/local/bin/crictl symlink to k3s
# [INFO] Creating /usr/local/bin/ctr symlink to k3s
# [INFO] Creating killall script /usr/local/bin/k3s-killall.sh
# [INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
# [INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
# [INFO] systemd: Creating service file /etc/systemd/system/k3s.service
# [INFO] systemd: Enabling k3s unit Created symlink from /etc/systemd/system/multi-user.target.wants/k3s.service to /etc/systemd/system/k3s.service.
# [INFO] systemd: Starting k3s

运行此安装后:

  • K3s 服务将被配置为在节点重启后或进程崩溃或被杀死时自动重启。
  • 将安装其他实用程序,包括 kubectlcrictlctrk3s-killall.shk3s-uninstall.sh
  • kubeconfig 文件将写入到 /etc/rancher/k3s/k3s.yaml,由 K3s 安装的 kubectl 将自动使用该文件。

单节点 Server 安装是一个功能齐全的 Kubernetes 集群,它包括了托管工作负载 pod 所需的所有数据存储、control plane、kubelet 和容器运行时组件。除非你希望向集群添加容量或冗余,否则没有必要添加额外的 Server 或 Agent 节点。

查询K3S信息

[root@k3s ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k3s Ready control-plane,master 59d v1.27.7+k3s1

查询节点信息

[root@k3s ~]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k3s Ready control-plane,master 59d v1.27.7+k3s1 172.29.244.92 <none> CentOS Linux 7 (Core) 3.10.0-1160.99.1.el7.x86_64 docker://24.0.7

卸载K3S

/usr/local/bin/k3s-uninstall.sh

基本使用

创建命名空间

使用命令行方式

# 创建命名空间 dev (ns = namespace)
kubectl create ns dev

使用yaml方式,新增namespace.yaml文件

apiVersion: v1
kind: Namespace #对象类型
metadata: # 元信息
name: dev # 空间名称
# 执行
kubectl apply -f namespace.yaml

#
查看所有命名空间
kubectl get ns

#
删除
kubectl delete ns dev

创建ConfigMap

使用yaml方式,新增configmap.yaml文件

apiVersion: v1
kind: ConfigMap
metadata:
name: configmap-erp-test #名称
namespace: dev #指定命名空间
data:
erp.test.replicas: "2"
application.yaml: |-
test:
enabled: true
# 执行
kubectl apply -f configmap.yaml

#
查看
kubectl get cm -n dev
kubectl describe cm -n dev configmap-erp-test

#
删除
kubectl delete cm

挂载至指定应用内部(方式二支持热更新)

apiVersion: v1
kind: Deployment
spec:
template:
spec:
containers:
- name: nginx
image: nginx:latest
env: # 注入环境变量
- name: ERP_RESPLICAS # 声明变量名称
valueFrom:
configMapKeyRef:
name: configmap-erp-test # 引用ConfigMap的name
key: erp.test.replicas # 将ConfigMap中erp.test.replicas的值注入到ERP_RESPLICAS中
---
apiVersion: v1
kind: Deployment
spec:
template:
spec:
containers:
- name: nginx
image: nginx:latest
volumeMounts: # 挂载数据卷声明
- name: configmap-volume # 要挂载数据卷的名称
mountPath: /app/configmap #挂载至容器内的路径
volumes: # 声明数据卷
- name: configmap-volume
configMap:
name: configmap-erp-test # 引用ConfigMap的name

验证

# 进入容器内部(exit 退出)
kubectl exec -it <pod_name> /bin/sh -n dev

#
查看全局环境变量
echo $ERP_RESPLICAS

#
查看挂载文件
cat /app/configmap/application.yaml

创建Deployment

新增nginx.yaml文件

apiVersion: apps/v1 #这里需要使用<group>/<version>的格式
kind: Deployment #对象类型
metadata: # 元信息
name: nginx-dev
namespace: dev # 指定命名空间
spec: # 详细参数配置
replicas: 1 # pod的副本数
selector:
matchLabels:
erpselector: nginx-test #标签
template:
metadata:
labels:
erpselector: nginx-test #标签
spec:
containers: # 容器信息
- name: nginx
image: nginx:latest # 指定拉取的镜像
ports:
- containerPort: 80 # 指定容器的端口

通过内网访问验证

# 执行
kubectl apply -f nginx.yaml

#
查看就绪状态,容器ID
kubectl get pods -n dev -o wide

#
测试内网访问
curl 10.42.0.9

创建Service

新增service.yaml文件,将NginxPod暴露公网访问

apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: dev
spec:
type: NodePort #节点端口转发类型
selector: #设置标签选择器。POD根据匹配此标签来加入到此service下
erpselector: nginx-test # 转发到指定标签的pods
ports:
- port: 80 # Service绑定的端口(该serive的请求端口,主要是用于集群内部调用)
targetPort: 80 #表示Service转发外部请求到容器的目标端口80(nginx-test的80)
protocol: TCP #示Service转发请求到容器的协议是TCP
nodePort: 30080 #指定Service对外开放的节点端口(默认:30000-32767)
externalIPs: #指定暴露的公网IP(此为轻量云服务特殊情况使用)
- 123.124.125.126

验证

# 执行
kubectl apply -f service.yaml

#
查看
kubectl get svc -n dev
#NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
#nginx-service NodePort 123.124.125.126 <none> 80:30080/TCP 3m6s

公网访问:http://123.124.125.126:30080/


原文始发于微信公众号(给爷整笑辣):Kubernetes单机版部署

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/206884.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!