5分钟入手容器云平台,k3s快速部署,小水枪主机也可以用来学习kubernetes使用

原创
2021/02/20 20:21
阅读数 4.1K

为什么需要k3s? k8s集群搭建费时费力,需要非常大的集群资源,运行环境还是有一定的门槛,那还学个锤子,成人的世界我全要。

废话不多说,下面我们来实际安装k3s入门容器编排的微服务。

首先需要下载三个资源,如下官方直通车

安装的脚本

http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh
备用地址
https://docker-snake.cn-bj.ufileos.com/rancher/k3s-root/releases/download/v1.17.5-k3s/k3s-install.sh

k3s主文件

http://rancher-mirror.cnrancher.com/k3s/v1.17.5-k3s1/k3s
备用地址
https://docker-snake.cn-bj.ufileos.com/rancher/k3s-root/releases/download/v1.17.5-k3s/k3s

所需要的离线镜像

http://rancher-mirror.cnrancher.com/k3s/v1.17.5-k3s1/k3s-airgap-images-amd64.tar
备用地址
https://github.com/k3s-io/k3s/releases/download/v1.17.5%2Bk3s1/k3s-airgap-images-amd64.tar

文件下载完以后,上传到服务器中/data/目录下

升级内核与安装docker请查看前面的博客

内核升级至4.20,docker安装18.6.03

https://my.oschina.net/rootxxx/blog/3027744

下面开始安装mysql5.7,为什么安装mysql?相比ETCD更熟悉mysql

mysql配置文件

mkdir -p /data/rancher_mysql && \
tee /data/rancher_mysql/mysqld.cnf <<-'EOF'
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
symbolic-links=0
pid-file    = /var/run/mysqld/mysqld.pid
socket      = /var/run/mysqld/mysqld.sock
datadir     = /var/lib/mysql
character-set-server=utf8
collation-server=utf8_general_ci
innodb_file_per_table=1
max_connections=2048
EOF

以docker方式运行mysql

docker run -d \
--name rancher_mysql \
--restart=always \
-p 3306:3306 \
-v /data/rancher_mysql/data:/var/lib/mysql \
-v /data/rancher_mysql/log:/var/log/mysql \
-v /data/rancher_mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=k3sroot \
mysql:5.7 && \
docker logs -f rancher_mysql

导入离线镜像至docker中

docker load < /data/k3s-airgap-images-amd64.tar

创建k3s目录

mkdir -p /data/k3s_dir && \
cp -rf /data/k3s /data/k3s_dir/k3s && \
chmod 775 /data/k3s_dir/k3s && \
chmod 775 /data/k3s-install.sh

设置参数

export INSTALL_K3S_MIRROR=cn \
export INSTALL_K3S_SKIP_START=true && \
export INSTALL_K3S_BIN_DIR=/data/k3s_dir \
export INSTALL_K3S_SKIP_DOWNLOAD=true \
export INSTALL_K3S_VERSION=v1.17.5-k3s1 \
export INSTALL_K3S_EXEC='--docker'

安装服务,k3s会在数据中默认创建k3s数据库

/data/k3s-install.sh --datastore-endpoint='mysql://root:k3sroot@tcp(127.0.0.1:3306)/k3s' && service k3s start

创建软连接,为了使用起来更接近k8s

ln -s /data/k3s_dir/k3s /bin/kubectl

输入命令验证集群

kubectl get nodes

返回

NAME              STATUS   ROLES    AGE   VERSION
192-168-100-153   Ready    master   99s   v1.17.5+k3s1

证明部署成功,下面我们来发布一个Nginx应用,发布至base命名空间 创建命名空间

kubectl create namespace base

部署应用

kubectl apply -f - <<EOF
#应用
kind: Deployment
apiVersion: apps/v1
metadata:
  #名称
  name: snake-httpd-a
  #命名空间
  namespace: base
spec:
  #
  selector:
    matchLabels:
      app: snake-httpd
      ykb: web
      version: a
  #模板
  template:
    #数据描述[元数据]
    metadata:
      #标签
      labels:
        #应用
        app: snake-httpd
        ykb: web
        version: a
    #规格
    spec:
      #容器
      containers:
        #名称
      - name: snake-httpd-a
        #镜像
        image: busybox
        ports:
        - name: http
          containerPort: 80
        #镜像挂载目录
        volumeMounts:
        - name: time
          mountPath: /etc/localtime
        command: ["/bin/sh","-c","echo 'this is snake-httpd-a' > /var/www/index.html; httpd -f -p 80 -h /var/www"]
        #计算资源配置
        resources:
          #启动限制
          requests:
            #初始化CPU用量
            cpu: "100m"
            #初始化内存用量
            memory: "128Mi"
          #最大限制
          limits:
            #限制CPU最大用量
            cpu: "100m"
            #限制内存最大用量
            memory: "128Mi"
      #实际目录挂载
      volumes:
      #宿主机时间文件
      - name: time
        hostPath:
          path: /etc/localtime
---
#服务
kind: Service
apiVersion: v1
#数据描述[元数据]
metadata:
  #名称
  name: snake-httpd-a
  #命名空间
  namespace: base
#规格
spec:
  #容器
  selector:
    #应用
    app: snake-httpd
    #对应的应用版本
    version: a
  #端口
  ports:
      #名称
    - name: http
      #协议
      protocol: TCP
      #对外开放端口
      port: 14000
      #容器开放端口
      targetPort: 80
  #类型
  type: ClusterIP
  #对外开放的IP地址
  externalIPs: [192.168.100.153]
EOF

查看pod与svc运行状态

kubectl get pods -n base

NAME                             READY   STATUS    RESTARTS   AGE
snake-httpd-a-7bc8b96c8d-jjx2w   1/1     Running   0          13s

kubectl get svc -n base

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP       PORT(S)     AGE
snake-httpd-a   ClusterIP   10.43.141.221   192.168.100.153   14000/TCP   82s

集群外部访问

http://192.168.100.153:14000/

#返回
this is snake-httpd-a

集群内部访问

#部署一个客户端
kubectl apply -f - <<EOF
#应用
kind: Deployment
apiVersion: apps/v1
metadata:
  #名称
  name: snake-httpd-client
  #命名空间
  namespace: base
spec:
  #
  selector:
    matchLabels:
      app: snake-httpd-client
  #模板
  template:
    #数据描述[元数据]
    metadata:
      #标签
      labels:
        #应用
        app: snake-httpd-client
    #规格
    spec:
      #容器
      containers:
        #名称
      - name: snake-httpd-client
        #镜像
        image: busybox
        #镜像挂载目录
        volumeMounts:
        - name: time
          mountPath: /etc/localtime
        #以终端方式运行
        tty: true
        #计算资源配置
        resources:
          #启动限制
          requests:
            #初始化CPU用量
            cpu: "100m"
            #初始化内存用量
            memory: "128Mi"
          #最大限制
          limits:
            #限制CPU最大用量
            cpu: "100m"
            #限制内存最大用量
            memory: "128Mi"
      #实际目录挂载
      volumes:
      #宿主机时间文件
      - name: time
        hostPath:
          path: /etc/localtime
EOF

#查看客户端pod名称

kubectl get pods -n base

NAME                                  READY   STATUS    RESTARTS   AGE
snake-httpd-a-7bc8b96c8d-jjx2w        1/1     Running   0          11m
snake-httpd-client-5f9bf9bfd6-rnnqp   1/1     Running   0          75s

#登陆客户端
kubectl exec -it snake-httpd-client-5f9bf9bfd6-rnnqp  -n base /bin/sh

#用wget 发起请求,直接采用svc名称即可,无需注册中心,和外部访问一样,内部访问同样返回this is snake-httpd-a
wget -q -O - http://snake-httpd-a.base:14000

#k8s中采用的DNS提供服务发现,与服务通信直接使用服务名称即可
#http://{服务名}.{命名空间}:{端口}

内存占用情况

[root@192-168-100-153 /]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3944         944         824           9        2175        2764
Swap:             0           0           0
展开阅读全文
加载中
点击加入讨论🔥(3) 发布并加入讨论🔥
打赏
3 评论
4 收藏
1
分享
返回顶部
顶部