K8s安装过程

通过kubespray实现k8s的安装记录【https://github.com/kubernetes-sigs/kubespray】。
所使用的分支是release-2.11。\
——————kubespray加速方案—————-
https://github.com/wiselyman/k8s-installation
https://blog.csdn.net/zhouzixin053/article/details/104418164

烂泥:docker.io、gcr.io、quay.io镜像加速(20200413更新)


—————–禁用IPV6————————-
以下是Centos7.8的祼系统的安装部署过程。
操作前必须禁用IPV6,否则在安装docker等默认使用ipv6连接。
如下图:

彻底禁用IPV6方法:http://www.kxtry.com/archives/3044

——————————————
虚拟机配置:2核4G, IP: 192.168.10.130 192.168.10.134
第一步:在执行kubespray脚本前的环境准备,从release-2.11这个版本,默认是使用python3来安装了,故需要安装python3。
注:请不要使用python2进行安装,本人经验证确认在执行【CONFIG_FILE=inventory/myk8s/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}】动作时,会出错,且无法解决。

1.yum install -y python3 python3-pip python3-devel
2.mkdir -p ~/.pip/ && vi ~/.pip/pip.conf,添加如下内容:
[global]
index-url=http://mirrors.aliyun.com/pypi/simple    【尽量不要使用https的源,有可能某些源会严格检查SSL是否过期之类,从而导致安装出错】
trusted-host=mirrors.aliyun.com

第二步:配置服务器免密互信

ssh-keygen -t rsa -C "abc@admin.com"
ssh-copy-id 192.168.10.130

第三步,安装必须组件。

1.pip3 install -r requirements.txt

直至最后提示以下成功信息

第三步:进入kubespray的release-2.11分支安装单机版本。

mkdir inventory/myk8s
declare -a IPS=(192.168.10.137 192.168.10.138) 【这里是空格隔开,不是逗号】
CONFIG_FILE=inventory/myk8s/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
ansible-playbook -i inventory/myk8s/hosts.yml --become --become-user=root cluster.yml  -vvv --flush-cache【-vvv是显示安装细节过程,--flush-cache是清理操作缓存】

—————————-
加快安装效率及降低翻墙影响,可直接下载K8s离线包。
http://linuxtools.cn:42344/K8s_list/

安卓应用安装脚本

adb install的动作是拆分成两个动作完成的。
首先:adb push file.apk /data/local/tmp
接着:adb pm install /data/local/tmp/file.apk
最后:adb shell “rm -f /data/local/tmp/file.apk”
所以,当采用adb install 时,可登录shell中,直接进入/data/local/tmp目录下,如下图所示。

@echo off
 
set apkname=%1%
 
::传入apk路径
echo 您输入了参数:%apkname% 
 
Set filename=%apkname%
set filename=%~nx1
echo 文件名为:%filename%
set folder=%~dp1
echo 路径为:%folder%
 
tryagaint:
adb connect 192.168.30.22:5555 && adb install %apkname% && goto myexit
timeout /t 10
goto tryagaint
 
:myexit
echo "success to install"
pause
@echo off
 
set apkname=%1%
 
::传入apk路径
echo 您输入了参数:%apkname% 
 
Set filename=%apkname%
set filename=%~nx1
echo 文件名为:%filename%
set folder=%~dp1
echo 路径为:%folder%
 
 
adb push %apkname% /data/local/tmp
echo 复制到设备完成!***开始安装,耐心等待***
adb shell pm install -r /data/local/tmp/%filename%
echo ***安装完成***
adb shell rm /data/local/tmp/%filename%
echo ***删除临时文件***

istio-1.6.8的安装过程

istio-1.6.8支持K8s-1.15.7版本。
1.第一步:下载ISTIO-1.6.8并解压,它会解压至istio-1.6.8目录。
2.第二步:进入解压目录,找到istioctl的路径,并添加至环境变量,参考如下所示。

export PATH=$PATH:/root/istio-1.6.8/bin
export KUBERNETES_MASTER="http://172.16.3.244:6443"

3.第三步:安装demo
三、安装ISTIO
istioctl install –set profile=demo

———–错误收集——————
如果是使用K8s离线安装包,进行安装,则可能是已经修改了kubeconfig的路径,则可检查如下方式。

grep -r 'kubeconfig' ./K8s


解决办法:

cp /etc/kubernetes/bootstrap.kubeconfig /etc/kubernetes/admin.conf
cp /etc/kubernetes/admin.conf ~/.kube/config

					

Android开发时部分测试代码

public static String format(String format, Object... args) {
    return new Formatter().format(format, args).toString();
}
 
public static boolean hasDebugFlag() {
    String path = Environment.getExternalStorageDirectory() + "/Log/debug"; //文件路径
    FileWriter writer = null;
    try {
        File file = new File(path);
        return file.exists();
    }catch (Exception e) {
 
    }
    return false;
}
 
public static void removeDebugFlag() {
    String path = Environment.getExternalStorageDirectory() + "/Log/debug"; //文件路径
    FileWriter writer = null;
    try {
        File file = new File(path);
        if(file.exists()) {
            file.delete();
        }
    }catch (Exception e) {
 
    }
}
 
public static void writeLog(String fileName,String content) {
    String path = Environment.getExternalStorageDirectory() + "/Log/"; //文件路径
    FileWriter writer = null;
    try {
        File file = new File(path);
        if (!file.exists()) {  //没有创建文件夹则创建
            file.mkdirs();
        }
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(currentTime);
        // 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
        writer = new FileWriter(path + fileName, true);
        writer.write(dateString + " " + content + "\r\n");
        writer.flush();
        if (writer != null) {
            //关闭流
            writer.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
 
public static boolean saveBitmap(Bitmap bitmap, Long id) {
    if (bitmap == null)
        return false;
 
    String path = Environment.getExternalStorageDirectory() + "/Log/";
    FileOutputStream fos = null;
    try {
        File f = new File(path +id.toString() + ".png");
        if(f.exists()) {
            f.delete();
        }
        f.createNewFile();
        fos = new FileOutputStream(f);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.flush();
        return true;
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return false;
}
 
public void dumpFrame(ImiDevice.ImiFrame nextFrame, Long id) {
    try{
        ByteBuffer frameData = nextFrame.getData();
        int width = nextFrame.getWidth();
        int height = nextFrame.getHeight();
        frameData.position(0);
        int length = frameData.remaining();
        byte[] buf = new byte[length];
        frameData.get(buf);
        Bitmap save = com.commaai.face.util.Utils.RGB2Bitmap(buf, width, height);
        saveBitmap(save, id);
    }catch (Exception e) {
        writeLog("brokenflow.txt", "failed to save bitmap");
    }
}
 
使用逻辑
if(hasDebugFlag()) {
    dumpcnt = 20;
    removeDebugFlag();
}
 
if(dumpcnt > 0) {
    dumpcnt--;
    total++;
    dumpFrame(nextFrame, total);
}

VNC的安装

服务端安装:
yum -y install tigervnc-server
启动服务,直接执行,然后按提示输入访问密码。
vncserver

istio的sidecar注入原理

博文:https://zhaohuabing.com/2018/05/23/istio-auto-injection-with-webhook/
从k8s 1.9版本以来,引入AdmissionWebhook扩展机制,允许对ApiServer创建资源的进行验证及修改。

从图中看到,Admission中有两个重要的阶段,Mutation和Validation,这两个阶段中执行的逻辑如下:
Mutation
Mutation是英文“突变”的意思,从字面上可以知道在Mutation阶段可以对请求内容进行修改。
Validation
在Validation阶段不允许修改请求内容,但可以根据请求的内容判断是继续执行该请求还是拒绝该请求。
通过Admission webhook,可以加入Mutation和Validation两种类型的webhook插件,这些插件和Kubernets提供的预编译的Admission插件具有相同的能力。可以想到的用途包括:
修改资源。例如Istio就通过Admin Webhook在Pod资源中增加了Envoy sidecar容器。
自定义校验逻辑,例如对资源名称有一些特殊要求。或者对自定义资源的合法性进行校验。

Android安卓sshserver服务器版

Android/lto物联网等
第一种方案是Libssh2/libssh1这两种方案,需要个人开发很多功能。
第二种使用已经安卓化的应用:https://github.com/CFM880/simplesshd,可搭配
http://www.galexander.org/software/simplesshd/
https://gitee.com/skyuning/frpc-Android安卓的反向代理。
https://github.com/fatedier/frp
https://github.com/FrpcCluster/frpc-Android安卓的集群版反向代理

ISTIO的版本依赖

ISTIO的版本支持情况。
公司支持的版本是K8S-1.15.7和ISTIO-1.6
https://istio.io/latest/docs/setup/platform-setup/

Istio 1.6 has been tested with these Kubernetes releases: 1.15,1.16, 1.17, 1.18