手机网页浏览器-静觅丨崔庆才的个人站点

2021-04-26 12:29| 发布者: | 查看: |

--------

手机网页浏览器

-------
-2-ubuntu:/var/lib/docker/containers$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 3869584 0 3869584 0% /dev
tmpfs 777 2% /run
/dev/vda1 10 10% /
tmpfs 3886864 24 3886840 1% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 3886864 0 3886864 0% /sys/fs/cgroup
/dev/vdb 10252 - 99% /var/lib/docker

-2-ubuntu:/var/lib/docker/containers$ sudo fdisk -l
Disk /dev/vda: 100 GiB, 0 bytes, sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x3fa1d255

Device Boot Start End Sectors Size Id Type
/dev/vda1 * 66 100G 83 Linux


Disk /dev/vdb: 200 GiB, 2 bytes, sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

这是由于之前的数据信息被文件格式化以便 ext4,可是新扩容的一部分并沒有。

问了腾迅云的工程项目师,这时候候务必要再次文件格式化才可以用上新的容量,沒有好的处理方式。

最终的处理计划方案:

将当今连接点全部 Pod 驱赶到别的的连接点。 当今连接点撤出群集随后配备硬盘,再次实际操作 mount 和文件格式化。(可是这里劝别折腾了,终归還是要文件格式化的。 把连接点再加回家,这时候候能够选再次文件格式化数据信息盘,mount 到 /var/lib/docker。 再把之前的 Pod 取回到本连接点就行了。

结束。

觉得還是不完善啊,像 es 的扩容就便捷多了,无需整这么多麻烦事。


就昨日的情况下,Python 之父 Guido 发了个推特,说自身觉得退休太无聊了,随后因而乎决策添加微软。

同时推特上大神 Anders Hejlsberg(Delphi、C# 和 TypeScript 之父)转发了推特,表明期待能够一起工作中。

要了解,上年那会上年 10 月 30 日,Python 之父 Guido 公布退休,那时候他发推文说,“这件事觉得既苦涩又甜蜜:苦涩的是,我马上要离去 Dropbox,如今早已退休;甜蜜的是,在 Dropbox 做工程项目师期内,我学到许多,例如种类标明就来自这段亲身经历。我会十分怀恋在这里工作中的生活。”

看到这个信息我既吃惊又兴奋,Python 之父添加我司了?那我岂并不是和他也算做朋友了?哈哈哈。

那时候我看到这个信息以后,第一時间就去企业的系统软件里边查了下,果然就查到了,这里放个图。

他的 Title 叫 DISTINUISHED ENGINEER,这个 Title 可并不是一般的牛逼,在微软,有这样的 Title 的人但是寥寥无几的,DISTINUISHED 意思就是优秀的,十分牛逼的意思,能有这类 Title 的是为业界或企业做出过非常非常大奉献的,非常有危害力的,将会一般人在微软呆个二十多年都不一定能到这个影响力。他的职级和 Report Line 就不说了,他间距微软 CEO 纳德拉只差 3 级,略微形象点说就是对标阿里巴巴 P11 或 P12 的部位吧。

他的单位就立即写了 Python and Tools for AI,和 AI 有关,同时 Guido 又这么喜爱开源系统,微软也在一直拥抱开源系统,期待 Python 之父将来没多久以后又出新的杰作吧。

要了解 Python 之父 Guido 早已 64 岁了,也许大佬就是大佬吧,退休了觉得无聊,就来微软来玩玩。如何说呢?他这个影响力就是相近达到一些自身追求完美和完成自身的一些使用价值,顺带解消遣,这类境地彻底并不是大家能比的了。反过来想一想我国这个自然环境,多少人都是用编码来换取一份工作中谋取存活,随后 35 岁干没动了将会就被解雇。原本想进行说说的,可是觉得说来都是痛,就很少说了,期待我将来不会为日常生活迫不得已,可以随意地再次追求完美自身喜爱的物品。

总之,我就是来公布这个和 Python 之父变成“朋友”的高兴的信息,值得留念下,随后顺带期待下 Python 之父将来出新的杰作!

官方文本文档对requests的界定为:Requests 唯一的一个非转遗传基因的 Python HTTP 库,人类能够安全性享受。

应用Python写做爬虫的小小伙伴一定应用过requests这个控制模块,初入爬虫的小小伙伴也一定写过N个反复的requests,这是你的疑惑。自然也一直随着着我,近期在想对requests怎样开展封裝一下,让他适用适用通用性的涵数。若需要应用,立即启用便可。

那末难题来了,假如要写个供自身应用通用性的恳求涵数将会有几个难题

requests的恳求方法(GET\POST\INPUT等等) 智能化鉴别网站的编号,防止出現错码 适用文字、二进制(照片、视頻等为二进制內容) 和还需要傻瓜一点,那就是网站的Ua(Ua:User-Agent,基本上网站都会认证接纳到恳求的Ua。来基本分辨是爬虫還是客户)

那末我们就针对以上难题开干吧

Requests的安裝

在保证python自然环境构建进行后立即应用pip或conda指令开展安裝,安裝指令以下:


import requests

response = requests.get('get')

# 响应情况码
print("response.status_code:", response.status_code)
# 响应头
print("response.headers:", response.headers)
# 响应恳求头
print("response.request.headers:", response.request.headers)
# 响应二进制內容
print("response.content:", response.content)
# 响应文字
print("response.text", response.text)

# 回到以下
response.status_code: 200
response.headers: 'Date': 'Thu, 12 Nov 2020 GMT', 'Content-Type': 'application/json', 'Content-Length': '306', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'
response.request.headers: 'User-Agent': 'python-requests/2.24.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'
response.content: b' \n "args": , \n "headers": \n "Accept": "*/*", \n "Accept-Encoding": "gzip, deflate", \n "Host": "", \n "User-Agent": "python-requests/2.24.0", \n "X-Amzn-Trace-Id": "Root=1-5fad3abd-7516d60b3ea50d8"\n , \n "origin": "116.162.2.166", \n "url": "get"\n \n'

"args": ,
"headers":
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "",
"User-Agent": "python-requests/2.24.0",
"X-Amzn-Trace-Id": "Root=1-5fad3abd-7516d60b3ea50d8"
,
"origin": "116.162.2.166",
"url": "get"


import requests

urls = 'get'


def downloader(url, headers=None):
response = requests.get(url, headers=headers)
return response


print("downloader.status_code:", downloader(url=urls).status_code)
print("downloader.headers:", downloader(url=urls).headers)
print("downloader.request.headers:", downloader(url=urls).request.headers)
print("downloader.content:", downloader(url=urls).content)
print("downloader.text", downloader(url=urls).text)

# 回到实际效果如上所示,此处省略

urls = 'get'


def downloader(url, method=None, headers=None):
_method = "GET" if not method else method
response = requests.request(url, method=_method, headers=headers)
return response


print("downloader.status_code:", downloader(url=urls).status_code)
print("downloader.headers:", downloader(url=urls).headers)
print("downloader.request.headers:", downloader(url=urls).request.headers)
print("downloader.content:", downloader(url=urls).content)
print("downloader.text", downloader(url=urls).text)

文字编号难题

处理因为request的偏差分辨而导致解码不正确,而得到错码。


hardet -i simple/
# 假如pip立即安裝不成功的话,立即用清华源的镜像系统。

# 完成智能化版的解码:以下
encoding = cchardet.detect(response.content)['encoding']



def downloader(url, method=None, headers=None):
_method = "GET" if not method else method
response = requests.request(url, method=_method, headers=headers)
encoding = cchardet.detect(response.content)['encoding']
return response.content.decode(encoding)

区别二进制与文字的分析

在免费下载照片、视頻等需获得到其二进制內容。而免费下载网页页面文字需要开展encode。

同理,大家只需要将一个标示传进去,从而做到辨别的的实际效果。例如这样


def downloader(url, method=None, headers=None, binary=False):
_method = "GET" if not method else method
response = requests.request(url, method=_method, headers=headers)
encoding = cchardet.detect(response.content)['encoding']
return response.content if binary else response.content.decode(encoding)

默认设置Ua

在许多情况下,大家拿ua又是拷贝。又是加引号搭建key-value文件格式。这样有情况下仅仅用requests做个检测。就搞的麻烦的很。并且恳求过量了,立即就被封IP了。沒有自身的ip代理商,沒有钱又情况下还真有点觉得玩不起爬虫。

以便降低被封禁IP的几率甚么的,大家加上个自身的Ua池。Ua池的基本原理很简易,內部就是选用任意的Ua,从而降低被发现的几率.至于为何能够做到这这样的实际效果,在这里仅作简易详细介绍。详尽将会要从测算机互联网基本原理说起。

结果就是你一个企业里大多选用的都是同一个外网地址ip去浏览总体目标网站地址。那末就意味着将会你们企业有N本人应用同一个ip去浏览总体目标网站地址。而封禁做区别的一般由ip浏览频率和访问器的指纹识别和在一起的甚么鬼东东。简易了解为Ua+ip浏览频率做到峰值,你IP就对方关小黑屋了。

搭建自身的ua池,去加上默认设置的恳求头,

Ua有许多,这里就不放出来了,假如有兴趣爱好能够立即去源代码里边拿。立即说基本原理:结构许多个Ua,随后任意取用。从而减少这个同一浏览频率:同时也曝露端口号便捷你自身传入header


from powerspider.tools.Ua import ua
import requests

def downloader(url, method=None, header=None, binary=False):
_headers = header if header else 'User-Agent': ua()
_method = "GET" if not method else method
response = requests.request(url, method=_method, headers=_headers)
encoding = cchardet.detect(response.content)['encoding']
return response.content if binary else response.content.decode(encoding)

那末基本的文档都早已处理了,但是还不完善。出现异常解决,不正确重试,系统日志甚么都没。这如何行呢。活既然干了,那就干的漂好看亮的。

来让大家添加进来这些物品


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

from retrying import retry
from powerspider import logger
from powerspider.tools.Ua import ua
from requests import request, RequestException


@retry(stop_max_attempt_number=3, retry_on_result=lambda x: x is None, wait_fixed=2000)
def downloader(url, method=None, header=None, timeout=None, binary=False, **kwargs):
(f'Scraping url ')
_header = 'User-Agent': ua()
_maxTimeout = timeout if timeout else 5
_headers = header if header else _header
_method = "GET" if not method else method
try:
response = request(method=_method, url=url, headers=_headers, **kwargs)
encoding = cchardet.detect(response.content)['encoding']
if response.status_code == 200:
return response.content if binary else response.content.decode(encoding)
elif 200 response.status_code 400:
(f"Redirect_URL: response.url ")
logger.error('Get invalid status code %s while scraping %s', response.status_code, url)
except RequestException as e:
logger.error(f'Error occurred while scraping url , Msg: e ', =True)


if __name__ == '__main__':
print(downloader("", "GET"))

至此,大家的对Requests二次封裝,结构通用性的恳求涵数就早已进行了。

期待下次再见了


前阵子有个朋友问我一个 Python 有关的难题,随后我把处理计划方案简易用编码写了一下发给他,結果他说跑不起来,我就很疑惑,确定了下他说 Python 库也都装了,可是运作的情况下還是会报库找不到。果不其然,历经一段時间沟通交流发现,它的设备上装了两个 Python 自然环境,装 Python 库的情况下是用的 pip 安裝的,它对应了一个 Python 自然环境,可是运作的情况下确是用的应用的 python3 指令确是对应此外一个 Python 自然环境,理所应当就跑堵塞了。这个难题实际上挺普遍的,有情况下跟对方说查验下 Python 自然环境相对路径甚么的,可是对方有情况下其实不了解如何做,或立即得再告知他用 python3 -m pip install ... 指令来装包。

此外我也有个要求是,我写了一些编码,想立即把运作結果和编码发给他人看,一种方式能够立即借助于 GitHub,编码放上去,随后让对方 Clone 下来再运作。对方也得配备下有关的自然环境才可以正确跑起来。另外一种方式则是装包 Docker 镜像系统,可是这也得附加花一些時间。有木有更好的计划方案处理这个难题呢?

上面这就是两个难题:

自然环境不一致的难题 自然环境共享资源的难题

这俩难题有通用性的处理计划方案吗?有!答案就是云 IDE。有了云 IDE,不但以上两个难题能够处理,乃至都无需自身配备开发设计自然环境了,大家只需要一个访问器就可以线上编写编码,同时这个 IDE 还能共享给别人,别人开启以后,看到的就是和我如出一辙的內容,乃至还能够看到我正在编写编码的即时实际效果。

美哉美哉!

今日就给大伙儿详细介绍一款云 IDE,是华为家的,叫做「华为云CloudIDE」,我试用了一下觉得还非常好,它的官方详细介绍网页页面是这样的:

官方详细介绍以下:

根据华为云CloudIDE,您仅需一个访问器便可以编写、调节、运作您的编码。

开发设计自然环境一般包含各种各样配备文档、特殊的語言、架构版本号、和别的本人机器设备等等一系列本人配备。当您开发设计一个新的新项目或检测一些程序时,迫不得已对已有的本人配备做相应的调剂。或,您能够根据CloudIDE将本人的偏好设定迁移到云端。CloudIDE将储存新项目设定,完成您与别人共享资源,并根据访问器授于浏览的管理权限。您能够将全部文档储存在云自然环境中,并根据各种各样浏览机器设备实际操作管理方法它们。开发设计自然环境在云端,您能够完成编码阅读文章、编写、调节、运作,还可以将编码存入编码库房,随时、随地、随心!

和我刚刚说的就是一样的,运用它大家能够处理众多难题:如自然环境配备、自然环境统一、自然环境共享资源的难题,同时大家还能够随时随地编写编码,分毫不会受到设备的限定,上云以后,一切都是那末便捷。

好,这里我就带大伙儿来体验下「华为云CloudIDE」吧。

最先,现阶段「华为云CloudIDE」是能够完全免费体验的,每一个人每天有 120 分钟的完全免费体验時间,假如要得到更好的体验能够建立付费案例。

现阶段完全免费体验需要有这些要求:

尊重的客户,您早已启用CloudIDE服务,完全免费体验需要遵循以下承诺:

每天的完全免费体验時间为120分钟,少于5分钟不可以建立新的体验; 每一个案例可以使用时长为60分钟,60分钟后,案例将会被删掉,而且数据信息将会被删掉; 同一時间只能体验一个案例,开启第二个案例将会全自动关掉第一个案例; 完全免费体验不可以确保最好应用体验,您将会需要排长队等待,付费应用能够得到更好的体验

彻底没难题,体验彻底充足了。

我这里实际操作的 URL 是 cloudide/trial,大伙儿能够申请注册个华为云账号就可以看到对应的通道网页页面了,就是上文发的图。

因为我对 Python 比较熟习,那末我就来体验一个 Python 自然环境吧,找到正下方的 Python 自然环境,随后点一下「完全免费体验」。

这时候候自然环境就会变为「起动中」的情况,如图所示:

随后接下来大家就会进到到云 IDE 的自然环境,等候一顿原始化以后以后,大家便可以看到以下网页页面,如图所示:

嗯?有木有熟习的觉得?

没错,这和 VS Code 可太像了,真是就是一个线上版的 VS Code。但是细心看看,实际上還是有些不一样的,例如左上角的 Logo,软件库房和一些菜单选项。能够说是 VS Code 的魔改版。

大家看下左边栏别的的菜单,检索、版本号操纵、调节没啥好说的,看看软件库房吧,开启以后是这样的:

这里大家能够看到「华为云CloudIDE」早已为大家预装了一些软件,如 Python。此外正下方也有一些强烈推荐的软件,例如 Huawei Cloud Toolkit,这些软件的安裝方法和 VS Code 是如出一辙的。

接下来大家再看看菜单的一些配备,随意挑几个看看吧:

基本上全部作用菜单和 VS Code 是一样的,但是「华为云CloudIDE」加上了一些通道,例如 Close Instance 等等,点了以后就会关掉当今云 IDE 案例。

OK,接下来大家再回到编码看看,看看它给原始化了个甚么,编码构造是这样的:

就是一个基本的 Flask 的 Hello World。

那来跑跑试试吧,点一下右上角的运作按钮,如图所示:

哦,竟然出错了,內容以下:

这里出错说找不到 flask 这个包,那很显著就是没安裝了,正好大家能够看到 requirements.txt 界定了有关的依靠自然环境,那大家来手动式安裝下吧。

在当今指令行下键入:


运作結果相近以下:

看起来非常好,此外能够观查到它是从 repository/pypi/ 这里免费下载的 Python 包,速度也挺快的。真是是出现意外收获呢,又发现了一个非常好的 Pypi 加快镜像系统。

顺带看看 pip.conf 配备吧:


[global]
index-url = repository/pypi/simple
trusted-host =
timeout = 120
extra-index-url = pypi/simple

pip3 install requests -i repository/pypi/simple

速度還是挺非常好的,美滋滋,出现意外收获。

OK,切回正题,这时候候大家早已装完自然环境了,再次运作 app.py,这时候候便可以发现运作取得成功了,結果相近以下:

能够看到它就在 8080 端口号上运作了一个服务,那咋浏览呢?

在运作的同时,还弹出了这么一个对话框,如图所示:

好像是提醒大家能够申请注册一个外界端口号将服务曝露出去,大家点一下 Register 和 OK。

接下来 OK 按钮就变为了 Access 按钮,如图所示:

还带了一个二维码和 Copy 按钮,大家 Copy 一下看看,我 Copy 以后的 URL 是 ,随后我在访问器中开启,显示信息以下:

很非常好啊,这是全自动给大家转化成了一个网站域名,随后还把服务曝露出去可供浏览了,挺好。

接下来大家再看看 Workspace 吧,切换下编码文档夹,点一下 File - Open ,能够看到以下网页页面:

能够看到当今开启的是 python3-sample 这个文档夹,那能换别的文档夹吗?我在上方键入个根文件目录 / 看看,結果如图所示:

出現了熟习的 Linux 文档树构造,那能够判断这实际上就是一个 Linux 自然环境了,那岂并不是干啥事都行了。

找到 /home/user/projects 文件目录,看起来是用来专业储放新项目的文件目录。

此外我再试试能否随意开启一个 GitHub 上的新项目吧,例如在操纵台进到刚刚这个文件目录,随后 Clone 一个新项目,指令以下:


cd /home/user/projects/
git clone Python3WebSpider/ScrapyTutorial.git

OK,简易 Clone 了一个 Scrapy 新项目,取得成功!如图所示:

随后开启下这个新项目,如图所示:

开启 Terminal,安裝下依靠:


此外这个新项目依靠于 MongoDB,但是大家这里仅仅检测,能够撤销它的依靠,setting.py 中注解掉以下编码:


ITEM_PIPELINES = 
'tutorial.pipelines.TextPipeline': 300,
- 'tutorial.pipelines.MongoDBPipeline': 400,
+ #'tutorial.pipelines.MongoDBPipeline': 400,


这时候候便可以看到爬虫就取得成功运作了,如图所示:

完善,Clone 的新项目同样成功运作了,美滋滋。

最终大家看看这个撤出以后如何,先拷贝下当今的 URL,我的 e-5/sermgcaktl/#/home/user/projects/ScrapyTutorial,随后大家立即关掉当今网页页面选项卡,随后再次进到,看看如今的运作情况还在不在。

牛逼!再次进到以后還是原先的模样,操纵台仍然還是开的,跑的結果也仍然有!

很好!

那这个自然环境如何共享给他人呢?看了下「华为云CloudIDE」是适用共享作用的,这里能够进到到 CloudIDE 的,点一下管理方法,随后根据白名单或黑名单的方法加上客户便可以了。

好了,到如今为止「华为云CloudIDE」就体验完了,觉得总体上還是挺非常好的,大伙儿还可以来体验试一试吧!


YAML文档概述

K8s群集文档中对資源管理方法和資源目标编排布署都能够根据申明款式yaml,文档来处理,也就是说能够把需要对資源目标实际操作编写到yaml,文档中。

大家称之为資源清单或資源清单文档根据kubectl指令立即应用資源清单文档便可以完成对很多資源目标开展编排布署

基本英语的语法 尺寸写比较敏感 应用缩进表明层级关联,缩进不容许应用tab,只容许空格 缩进的空格数不关键,要是同样层级的元素左对齐便可 ‘#’表明注解 ---表明新的yaml文档的刚开始数据信息种类YAML 适用以下几种数据信息种类: 目标:键值对的结合,又称为投射(mapping)/ 哈希(hashes) / 字典(dictionary) 数字能量数组:一组顺次序排序的值,又称为编码序列(sequence) / 目录(list) 纯量(scalars):单独的、不能再分的值变量定义变量定义是最基本的,不能再分的值,包含: Null 时间引入

锚点和 * 别称,能够用来引入:

用来创建锚点(defaults), 表明合拼到当今数据信息,* 用来引入锚点。


defaults: defaults
adapter: postgres
host: localhost
development:
database: myapp_development
: *defaults
test:
database: myapp_test
: *defaults
---非常于
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

apiVersion: v1 # API版本号 可以使用指令kubeclt api--verison查询
kind: ReplicationController # 資源种类 - 副本操纵器RC
metadata: # 資源元数据信息
name: mysql # - RC的名字(全局性唯一),合乎总体目标的Pod有着此标识
spec: # 資源的规格型号(RC的有关特性的界定)
replicas: 1 # 副本的期待数量
selector: # 标识挑选器
app: mysql
# *********************************************
template: # Pod 模板
metadata:
name: mysql
labels: # 标识 Pod 副本有着的标识,对应RC的Selector
app: mysql
spec: # Pod规格型号
containers: # 器皿的配备
- name: mysql # 器皿名字
image: mysql # 器皿镜像系统(对应的Docker images)
ports:
- containerPort: 3306 # 器皿引入监视的端口号号
env: # 自然环境配备
- name: MYSQL_ROOT_PASSWORD
value: "123456"


---
apiVersion: v1
kind: Service # 資源种类 服务
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- port: 3306

# kubectl create 
kubectl create deployment web --image=nginx -o yaml --dry-run
# -o 应用yaml文件格式展现
# -dry-run 尝试运作,其实不会真实运作
# 储存至myweb.yaml
kubectl create deployment web --image=nginx -o yaml --dry-run myweb.yaml

kubectl create deployment web —image=nginx -o yaml —dry-run运作实际效果以下⬇️:
Part 2: 应用指令导出来yaml文档
kubectl get
kubectl get deploy # 查询布署
kubectl get deploy nginx -o yaml --export myweb.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

Basic Commands (Beginner):
create # Create a resource from a file or from stdin.
expose # 应用 replication controller, service, deployment 或 pod 并曝露它做为一个 新的 run # 在群集中运作一个特定的镜像系统
set # 为 objects 设定一个特定的特点

Basic Commands (Intermediate):
explain # 查询資源的文本文档
get # 显示信息一个或更多 resources
edit # 在服务器上编写一个資源
delete # Delete resources by filenames, stdin, resources and names, or by resources and label selector

Deploy Commands:
rollout # Manage the rollout of a resource
scale # 为 Deployment, ReplicaSet, Replication Controller 或 Job 设定一个新的副本数量
autoscale # 全自动调剂一个 Deployment, ReplicaSet, 或 ReplicationController 的副本数量

Cluster Management Commands:
certificate # 改动 certificate 資源.
# 显示信息群集信息内容
top # Display Resource (CPU/Memory/Storage) usage.
cordon # 标识 node 为 unschedulable
uncordon # 标识 node 为 schedulable
drain # Drain node in preparation for maintenance
taint # 升级一个或多个 node 上的 taints

Troubleshooting and Debugging Commands:
describe # 显示信息一个特定 resource 或 group 的 resources
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

Create a resource from a file or from stdin.

JSON and YAML formats are accepted.

Examples:
# Create a pod using the data in pod.json.
kubectl create -f ./pod.json

# Create a pod based on the JSON passed into stdin.
cat pod.json | kubectl create -f -

# Edit the data in docker-registry.yaml in JSON then create the resource using the edited data.
kubectl create -f docker-registry.yaml --edit -o json

Available Commands:
clusterrole # Create a ClusterRole.
clusterrolebinding # 为一个特定的 ClusterRole 建立一个 ClusterRoleBinding
configmap # 从当地 file, directory 或 literal value 建立一个 configmap
cronjob # Create a cronjob with the specified name.
deployment # 建立一个特定名字的 deployment.
job # Create a job with the specified name.
namespace # 建立一个特定名字的 namespace
poddisruptionbudget # 建立一个特定名字的 pod disruption budget.
priorityclass # Create a priorityclass with the specified name.
quota # 建立一个特定名字的 quota.
role # Create a role with single rule.
rolebinding # 为一个特定的 Role 或 ClusterRole建立一个 RoleBinding
secret # mand 建立一个 secret
service # mand 建立一个 service.
ount # 建立一个特定名字的 service account

Options:
--allow-missing-template-keys=true: If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
--dry-run=false: If true, only print the object that would be sent, without sending it.
--edit=false: Edit the API resource before creating
-f, --filename=[]: Filename, directory, or URL to files to use to create the resource
-k, --kustomize='': Process the kustomization directory. This flag can't be used together with -f or -R.
-o, --output='': Output format. One of:
json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.
--raw='': Raw URI to POST to the server. Uses the transport specified by the kubeconfig file.
--record=false: Record mand in the resource annotation. If set to false, do not record mand. If set to true, mand. If not set, default to updating the existing annotation value only if one
already exists.
-R, --recursive=false: Process the directory used in -f, --filename recursively. Useful when you want to manage
anized within the same directory.
--save-config=false: If true, the configuration of current object will be saved in its annotation. Otherwise, the
annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.
-l, --selector='': Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)
--template='': Template string or path to template file to use when -o=go-template, -o=go-template-file. The
template format is golang templates [pkg/text/template/#pkg-overview].
--validate=true: If true, use a schema to validate the input before sending it
--windows-line-endings=false: Only relevant if --edit=true. Defaults to the line ending native to your platform.

Usage:
kubectl create -f FILENAME [options]

近期blog换上了 Hexo,可是发现常常无缘无故搭建不成功,报运行内存外溢,Out of Memory,不正确以下:


==== JS stack trace =========================================

0: ExitFrame [pc: 0x1409219]
Security context: 0x36ffd21408d1 JSObject
1: get sticky [0x36ffd2149801](this=0x1e69c6f730e1 JSRegExp String[10]: [\t \n\r]+ )
2: match [0x6ca6396ae39] [/github/workspace/node_modules/js-beautify/js/src/core/inputscanner.js:~110] [pc=0x1d19a16be4dc](this=0x1e69c6f73119 InputScanner map = 0x1c206a47a549 ,0x1e69c6f730e1 JSRegExp String[10]: [\t \n\r]+ )
3: tokenize [0x6ca6396e171] [/gith...

1: 0xa17c40 node::Abort() [hexo]
2: 0xa1804c node::OnFatalError(char const*, char const*) [hexo]
3: 0xb95a7e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [hexo]
4: 0xb95df9 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [hexo]
5: 0xd53075 [hexo]
6: 0xd53706 v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [hexo]
7: 0xd5ffc5 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [hexo]
8: 0xd60e75 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [hexo]
9: 0xd6251f v8::internal::Heap::HandleGCRequest() [hexo]
10: 0xd10f85 v8::internal::StackGuard::HandleInterrupts() [hexo]
11: 0x106c5c6 v8::internal::Runtime_StackGuard(int, unsigned long*, v8::internal::Isolate*) [hexo]
12: 0x1409219 [hexo]

缘故就是运行内存外溢了,这是由于 Hexo 在搭建的情况下存了一个非常大的数字能量数组,而默认设置 Node 运作时最大运行内存为 512 MB,

处理计划方案,能够立即设定 Node 的最大运行内存限定,例如我立即设定为 16G,在搭建之前实行以下指令就可以了:

例如我这里有一段编码:


FROM python:3.6
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
VOLUME ["/app/proxypool/crawlers/private"]
CMD ["supervisord", "-c", "supervisord.conf"]

仅仅做为示例,这里行号我也没标,行数也有将会许多行,例如上百行。

例如我就想告知大伙儿,我想把:


看,我早已说完了。

以便说这件事,我需要打好几行字,我得把原先的编码打上,随后说「改成」,随后再把新编码打上。

麻烦吧?

有木有甚么更好的表述方法呢?

有。

看这里:


-RUN pip install -r requirements.txt
+RUN pip install -r requirements.txt -i simple

常常 Code Review 的朋友一定倍感亲切。

那这个如何完成的呢?实际上这就是用了 Markdown 高亮度的一种写法,只需要把語言改成 diff 就行了。

原語言以下:

这里以便避免 Markdown 分析矛盾,我就用照片了。

总之就是語言标明改成 diff,随后需要删掉的前面加个减号,需要提升的加个加号就可以了。

结束!

期待有协助!


# 临时性关掉防火墙
systemctl stop firewalld
# 永久性关掉防火墙
systemctl disable firewalld
# 认证
systemctl status firewalld

# 临时性关掉
setenforce 0
# 永久性
sed -i 's/enforcing/disabled/' /etc/selinux/config

# 临时性
swapoff -a
# 永久性
sed -ri 's/.*swap.*/# /' /etc/fstab

# 设定名字(k8s-m-1)忽视大写字母
hostnamectl set-hostname k8s-m-1
# 认证
hostname

# 设定
cat /etc/hosts EOF
masterIp master
node1Ip node1
node2Ip node2
EOF
# eg
cat /etc/hosts EOF
192.168.50.212 k8s-m-1
192.168.50.87 k8s-n-1
192.168.50.85 k8s-n-2
EOF

cat /etc/sysctl.d/k8s.conf .bridge.bridge-nf-call-ip6tables = .bridge.bridge-nf-call-ip6tables = 1
EOF
# 起效
sysctl --system

yum install -y ntpdate 
ntpdate
# 三台机子輸出以下则取得成功(相差几秒或几分为一切正常状况)

# You can use scripts for one click installation,You may need to type enter at the end
# remove docker
sudo yum remove docker \
docker-client \
docker-client-latest \
mon \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# Set up repository
sudo yum install -y yum-utils
# Use Aliyun Docker
sudo yum-config-manager --add-repo docker-ce/linux/centos/docker-ce.repo
# install docker from yum
yum install -y docker-ce docker-ce-cli containerd.io
# restart docker
systemctl restart docker
# cat version
docker --version

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json -'EOF'

"registry-mirrors": ["pre>
cat EOF /etc/yum.repos.es.repo
[es]
es
es/yum/es-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
es/yum/doc/yum-key.es/yum/doc/rpm-package-key.gpg
EOF

安裝 kubectl kubelet kubeadm(all)
# install kubectl kubelet kubeadm
yum install -y kubectl kubelet kubeadm
# set boot puter
systemctl enable kubelet

kubeadm init \
--apiserver-advertise-address=youselfIp of Master \
--image-repository /google_containers \
# 不矛盾便可
--service-cidr=10.10.0.0/16 \
--work-cidr=10.122.0.0/16

# eg
kubeadm init \
--apiserver-advertise-address=192.168.50.212 \
--image-repository /google_containers \
--service-cidr=10.10.0.0/16 \
--work-cidr=10.122.0.0/16

普遍不正确:running with swap on is not supported. Please disable swap

[preflight] If you know what you are doing, you can make a check non-fatal with `—ignore-preflight-

errors=…`

缘故:系统软件全自动开展分区

处理:


# 临时性
swapoff -a
# 永久性
sed -ri 's/.*swap.*/# /' /etc/fstab

mkdir -p $HOME/.kube
sudo cp -i /es/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubeadm join 172.16.164.136:6443 --token 9oilao.bpbxcm5zkk0jjcgm --discovery-token-ca-cert-hash sha256:609794bd03915be382bdb130c4c180e89cdc863d35cf99be79cf4ddcbfacee24

添加取得成功,以下图

此时大家在Master连接点上应用指令kubectl get nodes查询连接点信息内容:以下图所示

此时的kubectl get nodes的status都是NotNotReady:

kubectl get pods -n kube-system

如图:

果真,两个Pending犹豫未决

此时大家布署CNI互联网,配备以下


# 依据官方文本文档提醒配备CNI互联网
kubectl apply -f coreos/flannel/master/Documentation/kube-flannel.yml
# 出错:The connection to the server was refused - did you specify the right host or port? 缘故:外网地址不能浏览 - 的真正IP。

sudo vi /etc/hosts
199.232.28.133
# 以下

# 开启IPVS,改动ConfigMap的kube-system/kube-proxy中的方式为ipvs

kubectl edit cm kube-proxy -n kube-system
# 将空的data - ipvs - mode中更换以下
mode: "ipvs"

在此运作kubectl apply -f coreos/flannel/master/Documentation/kube-flannel.yml取得成功,如图

此时运作kubectl get nodes实际效果图以下- 取得成功。(肯能其实不一定会立马取得成功,上面

<
>

 
QQ在线咨询
售前咨询热线
18720358503
售后服务热线
18720358503
返回顶部