目录
- 如何安装k3s
- k3s 安装 nginx
- k3s 安装 mysql
- k3s 安装 redis
前言
在安装完成 multipass 虚拟机的基础上,介绍安装 k3s 以及一些常用环境的搭建
1. 如何安装 k3s
1. 创建三个虚拟机实例
# 创建集群三个实例
multipass launch --name master -c 2 --mem 2G --disk 40G 18.04
multipass launch --name worker1 -c 1 --mem 2G --disk 40G 18.04
multipass launch --name worker2 -c 1 --mem 2G --disk 40G 18.04
2. 初始化master节点
安装k3s到master 实例中
multipass exec master -- /bin/bash -c "curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -"
获取安装k3s后的token 用于进行集群的关联
multipass exec master -- /bin/bash -c "sudo cat /var/lib/rancher/k3s/server/node-token"
3. 初始化worker节点
获取master节点的ip地址
multipass ls|grep master
# 或者
multipass info master| grep IPv4
进行worker 节点的初始化
根据前面获取到的信息进行脚本初始化
# 设置变量
K3S_URL="https://192.168.64.xxx:6443"
K3S_TOKEN="xxxx::server:xxx"
K3S_INSTALL_URL="https://rancher-mirror.rancher.cn/k3s/k3s-install.sh "
# 安装worker1
multipass exec worker1 -- /bin/bash -c "curl -sfL ${K3S_INSTALL_URL} | INSTALL_K3S_MIRROR=cn K3S_URL=${K3S_URL} K3S_TOKEN=${K3S_TOKEN} sh -"
# 安装worker2
multipass exec worker2 -- /bin/bash -c "curl -sfL ${K3S_INSTALL_URL} | INSTALL_K3S_MIRROR=cn K3S_URL=${K3S_URL} K3S_TOKEN=${K3S_TOKEN} sh -"
验证worker节点安装情况
multipass exec worker1 -- /bin/bash -c "systemctl status k3s-agent"
2. k3s 安装 nginx
1. 初始化master中k3s 的部分环境
建立自己的 namespace 命名空间
- 进入到 master 实例
multipass shell master
- 进入到 root 权限
sudo su
- 创建自己的命名空间
我创建的命名空间是 test,后面的yaml 文件也是以这个命名空间为基础去创建的
kubectl create namespace test
- 设置默认命名空间
默认命名空间可以帮助我们去更简单的使用 kubectl 命令,否则每次命令需要指定命名空间
kubectl config set-context default --namespace=test
2. 构建nginx的部署 yaml 文件
- nginx_pod.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: test
spec:
selector:
matchLabels:
app: demo-pod
replicas: 1
template:
metadata:
labels:
app: demo-pod
spec:
containers:
- name: demo-container
image: nginx:latest #本地私有镜像库的镜像名称+版本
ports:
- containerPort: 8800
hostPort: 8800
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: test
labels:
app: demo-service
spec:
type: NodePort
ports:
- port: 8800
targetPort: 80
protocol: TCP
nodePort: 30990
name: http
selector:
app: demo-pod
4 使用 kubectl 命令通过nginx.yaml创建 nginx 实例
将nginx的yaml文件复制到 master 节点的用户根目录
multipass transfer nginx_pod.yml master:./
进入到 master节点并切换到root 用户
multipass shell master
sudo su
进行 nginx安装
kubectl apply -f nginx_pod.yml
验证 nginx 安装
由于我们 service 中设置了节点端口指向,将 nginx 的端口映射到了节点的30990上,所以需要使用master 节点的 ip 和svc 中指定的端口进行访问
curl 192.168.64.3:30990
在pod内进行访问验证
# 进入到 pod 内
kubectl exec -it nginx-deployment-7fdd7d87b7-svmvc bash
# 访问验证
curl 127.0.0.1:80
2. 安装mysql
在完成了k3s 安装,命名空间的创建等操作步骤后进行安装
构建mysql的部署 yaml 文件
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-conf
namespace: test
data:
mysql.cnf: |
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
symbolic-links=0
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
---
apiVersion: v1
kind: Service
metadata:
name: mysql-service
namespace: test
spec:
type: NodePort
selector:
app: my-mysql
ports:
- port: 3306
targetPort: 3306
nodePort: 32306
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-mysql
namespace: test
labels:
app: my-mysql
spec:
replicas: 1
selector:
matchLabels:
app: my-mysql
template:
metadata:
labels:
app: my-mysql
spec:
containers:
- name: my-mysql
image: mysql:8.0.30
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: 0.2
memory: 1G
requests:
cpu: 0.2
memory: 1G
env:
- name: MYSQL_ROOT_PASSWORD
value: root
- name: MYSQL_USER
value: test
- name: MYSQL_PASSWORD
value: test
ports:
- containerPort: 3306
protocol: TCP
name: http
volumeMounts:
- name: my-mysql-data
mountPath: /var/lib/mysql
- name: mysql-conf
mountPath: /etc/mysql/mysql.conf.d
volumes:
- name: mysql-conf
configMap:
name: mysql-conf
- name: my-mysql-data
hostPath:
path: /var/k3s/data/mysql
type: Directory
进行 master,worker1,worker2 节点目录初始化
multipass exec master -- /bin/bash -c "sudo mkdir -p /var/k3s/data/mysql"
multipass exec worker1 -- /bin/bash -c "sudo mkdir -p /var/k3s/data/mysql"
multipass exec worker2 -- /bin/bash -c "sudo mkdir -p /var/k3s/data/mysql"
初始化 mysql
进入到master 节点内
multipass shell master
进入到 root 权限
sudo su
使用上面的 yaml创建 mysql_deployment.yaml,并执行初始化容器
kubectl apply -f mysql_deployment.yaml
检查mysql 是否完成启动
kubectl get pod -n test
处理异常
如果发现无法正常启动,可以检查容器启动情况,查看具体信息
kubectl describe pod my-mysql-5776498d78-rnfss -n test
my-mysql-5776498d78-rnfss 是pod名称
test 的命名空间名称
3. 安装redis
在完成了k3s 安装,命名空间的创建等操作步骤后进行安装
进行 master,worker1,worker2 节点目录初始化
multipass exec master -- /bin/bash -c "sudo mkdir -p /var/k3s/data/redis"
multipass exec worker1 -- /bin/bash -c "sudo mkdir -p /var/k3s/data/redis"
multipass exec worker2 -- /bin/bash -c "sudo mkdir -p /var/k3s/data/redis"
构建部署 redis 的 yaml 文件
apiVersion: v1
kind: ConfigMap
metadata:
name: example-redis-config
namespace: test
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
dir /data
appendonly yes
save 900 1
save 300 10
save 60 10000
---
apiVersion: v1
kind: Service
metadata:
name: redis-master
namespace: test
labels:
app: redis
spec:
type: NodePort # 默认类型是ClusterIP不能制定nodePort端口
selector:
app: redis
ports:
- port: 6379
targetPort: 6379
nodePort: 32379 # 端口范围是:30000-32767不能超出范围
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: test
labels:
app: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: 'redis:6.2.5'
command:
- redis-server
- /redis-conf/redis.conf
env:
- name: MASTER
value: 'true'
ports:
- containerPort: 6379
resources:
limits:
cpu: '0.1'
memory: 1G
volumeMounts:
- mountPath: /data
name: data
- mountPath: /redis-conf
name: config
volumes:
- name: data
hostPath:
path: /var/k3s/data/redis
type: Directory
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
检查redis 是否完成启动
kubectl get pod -n test