【環境介紹】
cat > install_docker.sh
#!/bin/bash
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
#配置docker鏡像加速
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1jk30jsb.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
systemctl enable docker.service
docker -v
然后直接運行腳本:sh install_docker.sh
【安裝K3S】
當前為單點server節點:
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_EXEC="--docker" INSTALL_K3S_MIRROR=cn sh -s -
安裝完成后,修改配置下,編輯 k3s.service 文件
vim /etc/systemd/system/multi-user.target.wants/k3s.service
在這里需要修改ExecStart的值,將其修改為:
/usr/local/bin/k3s server --docker --no-deploy traefik
重啟下 k3s,執行以下兩條命令
systemctl daemon-reload
service k3s restart
查看信息,返回正常運行即可:
[root@k8snode1 data]# service k3s status
Redirecting to /bin/systemctl status k3s.service
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2021-03-24 14:47:48 CST; 3h 19min ago
Docs: https://k3s.io
Process: 39732 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Process: 39727 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Main PID: 39734 (k3s-server)
Memory: 503.4M
CGroup: /system.slice/k3s.service
└─39734 /usr/local/bin/k3s server
3月 24 18:03:38 k8snode1 k3s[39734]: I0324 18:03:38.493416 39734 trace.go:205] Trace[21479135]: "Get" url:/api/v1/namespaces/kube-system/endpoints/rancher.io-local-path,user-agent:local-path-provisioner/v0.0.0 (lin...tal time: 640ms):
3月 24 18:03:38 k8snode1 k3s[39734]: Trace[21479135]: ---"About to write a response" 640ms (18:03:00.493)
3月 24 18:03:38 k8snode1 k3s[39734]: Trace[21479135]: [640.641777ms] [640.641777ms] END
3月 24 18:04:18 k8snode1 k3s[39734]: I0324 18:04:18.168017 39734 trace.go:205] Trace[2036722184]: "GuaranteedUpdate etcd3" type:*core.Endpoints (24-Mar-2021 18:04:17.622) (total time: 545ms):
3月 24 18:04:18 k8snode1 k3s[39734]: Trace[2036722184]: ---"Transaction prepared" 203ms (18:04:00.826)
3月 24 18:04:18 k8snode1 k3s[39734]: Trace[2036722184]: ---"Transaction committed" 341ms (18:04:00.167)
3月 24 18:04:18 k8snode1 k3s[39734]: Trace[2036722184]: [545.300086ms] [545.300086ms] END
3月 24 18:04:18 k8snode1 k3s[39734]: I0324 18:04:18.168333 39734 trace.go:205] Trace[2026568965]: "Update" url:/api/v1/namespaces/kube-system/endpoints/rancher.io-local-path,user-agent:local-path-provisioner/v0.0.0...tal time: 545ms):
3月 24 18:04:18 k8snode1 k3s[39734]: Trace[2026568965]: ---"Object stored in database" 545ms (18:04:00.168)
3月 24 18:04:18 k8snode1 k3s[39734]: Trace[2026568965]: [545.942876ms] [545.942876ms] END
查看默認命名空間
kubectl get ns
kubectl get all -n kube-system
【搭建PV用於持久化數據】
安裝NFS服務
[root@k8snode1 ~]# yum -y install nfs-utils
已加載插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
正在解決依賴關系
......
更新完畢:
nfs-utils.x86_64 1:1.3.0-0.68.el7
作為依賴被升級:
gssproxy.x86_64 0:0.7.0-29.el7 krb5-devel.x86_64 0:1.15.1-50.el7 krb5-libs.x86_64 0:1.15.1-50.el7 krb5-workstation.x86_64 0:1.15.1-50.el7 libini_config.x86_64 0:1.3.1-32.el7 libkadm5.x86_64 0:1.15.1-50.el7
完畢!
啟動NFS服務
[root@k8snode1 ~]# systemctl start nfs
[root@k8snode1 ~]# systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: active (exited) since 三 2021-03-24 10:26:50 CST; 6s ago
Process: 19435 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
Process: 19419 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Process: 19417 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Main PID: 19419 (code=exited, status=0/SUCCESS)
Memory: 0B
CGroup: /system.slice/nfs-server.service
3月 24 10:26:50 k8snode1 systemd[1]: Starting NFS server and services...
3月 24 10:26:50 k8snode1 systemd[1]: Started NFS server and services.
創建個存儲的目錄,這里定義為v1,當前使用主節點創建(如果需要使用掛載方式具體查看Linux文檔)注意這里寫IP為自己服務器的IP網段
[root@k8snode1 ~]# mkdir -p /mnt/v1
[root@k8snode1 ~]# cat >> /etc/exports <<EOF
> /mnt/v1 192.168.205.0/24(rw,no_root_squash)
> EOF
[root@k8snode1 ~]# exportfs -arv
exporting 192.168.205.0/24:/mnt/v1
[root@k8snode1 ~]#
[root@k8snode1 ~]# showmount -e
Export list for k8snode1:
/mnt/v1 192.168.205.0/24
[root@k8snode1 ~]#
創建PV,注意IP及命名信息及分配大小:
[root@k8snode1 ~]# cd /mnt/
[root@k8snode1 mnt]# cat >demo-v1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
labels:
name: pv001
spec:
nfs:
path: /mnt/v1
server: 192.168.205.152
accessModes: ["ReadWriteMany","ReadWriteOnce","ReadOnlyMany"]
capacity:
storage: 2Gi
[root@k8snode1 mnt]# kubectl apply -f demo-v1.yaml
persistentvolume/pv001 created
查看PV信息,跟上面定義的一致即可:
[root@k8snode1 mnt]# kubectl get pv -A
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 2Gi RWO,ROX,RWX Retain Bound my-mysql/mysql-pvc 3m46s
[root@k8snode1 mnt]# kubectl get pvc -A
NAMESPACE NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-mysql mysql-pvc Bound pv001 2Gi RWO,ROX,RWX 85s
[root@k8snode1 mnt]#
【創建namespace跟創建MySQL的pod】
K3S創建命名空間:
kubectl create namespace my-mysql
cat >mysql-pod.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: archery-mysql
namespace: my-mysql
data:
my.cnf: | ###以下是參數配置
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
lower_case_table_names=1
default-time_zone = '+8:00'
innodb_buffer_pool_size = 512M
server-id = 100
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 1
max_binlog_size = 500M
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
slow_query_log_file = mysql-slow.log
slow_query_log = 1
long_query_time = 1
[client]
default-character-set=utf8mb4
[mysqldump]
quick
quote-names
max_allowed_packet = 1024M
!includedir /etc/mysql/conf.d/
---
apiVersion: apps/v1
kind: Deployment ###定義類型
metadata:
name: archery-mysql
namespace: my-mysql
labels:
app: archery-mysql
spec:
selector:
matchLabels:
app: archery-mysql
template:
metadata:
labels:
app: archery-mysql
spec:
containers:
- name: archery-mysql
image: mysql:5.7 ###定義數據庫版本
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_DATABASE
value: archery ###默認創建的數據庫
- name: MYSQL_ROOT_PASSWORD
value: "123456" ###默認的數據庫密碼
volumeMounts:
- mountPath: /var/lib/mysql
name: data
- mountPath: /etc/mysql/my.cnf
name: config
subPath: my.cnf
resources: ###資源限制
requests:
memory: "512Mi"
cpu: "200m"
limits:
memory: "2048Mi"
cpu: "1000m"
volumes: ###定義數據持久化的參數
- name: data
hostPath:
path: /mnt/v1/mysql/data ###上面定義的nfs目錄 提前創建目錄 mkdir -p /mnt/v1/mysql/data
type: DirectoryOrCreate
- name: config
configMap:
name: archery-mysql
---
apiVersion: v1
kind: Service
metadata:
name: archery-mysql
namespace: my-mysql
labels:
app: archery-mysql
spec:
type: NodePort ###設置映射端口
ports:
- port: 3306
nodePort: 32311
selector:
app: archery-mysql
運行yaml文件
[root@k8snode1 mysql]# kubectl apply -f mysql-pod.yaml
configmap/archery-mysql created
deployment.apps/archery-mysql created
service/archery-mysql created
查看創建的信息,這里需要等一會
[root@k8snode1 mysql]# kubectl get pods -n my-mysql 指定命名空間
NAME READY STATUS RESTARTS AGE
archery-mysql-7658488545-8wp4x 0/1 ContainerCreating 0 102s
查看容器中數據庫的日志
[root@k8snode1 soft]# kubectl logs -n my-mysql --tail=100 -f archery-mysql-7658488545-8wp4x
2021-03-24 09:02:53+00:00 [Note] [Entrypoint]: Creating database archery
出現以下信息則正常,日志與正常安裝MySQL排錯一致:
查看最后的狀態:
root@k8snode1 mysql]# kubectl get pods -n my-mysql
NAME READY STATUS RESTARTS AGE
archery-mysql-7658488545-8wp4x 1/1 Running 0 6m15s
連接數據庫及查看持久化數據:
kubectl exec -it archery-mysql-7658488545-8wp4x -n my-mysql -- mysql -uroot -p123456
【k3s導入rancher】
rancher安裝,這里使用阿里雲鏡像指定版本,因為前幾次創建總是創建不上,可能是網絡原因
docker run -itd -p 80:80 -p 443:443 \
--restart=unless-stopped \
-e CATTLE_AGENT_IMAGE="registry.cn-hangzhou.aliyuncs.com/rancher/rancher-agent:v2.4.2" \
registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.4.2
rancher配置,訪問IP后,然后修改密碼,修改為中文,效果如下
k3s導入到rancher中
點擊添加集群,然后選擇導入選項
定義集群名稱,然后創建
需要在K3S端執行最后的命令,連接到當前rancher,然后點擊完成
K3S執行腳本,沒有報錯即可,如果有異常,多次執行:
到rancher上面查看狀態
查看主機:
創建項目查看命名空間的容器
直接點擊集群名
點擊添加項目,然后把對應的命名空間移動到新建的項目中
查看對應的項目
這樣就可以看到命名空間的容器信息(注意我這里新建了命名空間統一管理)
命令查看:kubectl get pods -n archery
查看具體容器信息進行維護
【總結】
rancher時常掛掉,重啟后一直報錯[INFO] Waiting for k3s to start,建議做好虛擬機快照測試;