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

Wesley13
• 阅读 948

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

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

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

安装的脚本

http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh

k3s主文件

http://rancher-mirror.cnrancher.com/k3s/v1.17.5-k3s1/k3s

所需要的离线镜像

http://rancher-mirror.cnrancher.com/k3s/v1.17.5-k3s1/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

数据库运行完毕后,在mysql中创建用于保存集群信息的库.

create database k3s

导入离线镜像至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'

安装服务

/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
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这