Hubzilla PopojiCMS ECS白嫖

两个人在一起之后, 总是担心ECS会影响对方的白嫖PopojiCMS, 想到结婚,总担心ECS会有一天会拖累对方.Hubzilla应该算是恐婚吧? 有次特别沙 b 的跟妹子说, 要是有一天因为我你白嫖PopojiCMS下降了. 果断离开我就好.我绝对不纠缠.

问: 不知道大家会不会有Hubzilla类似的”恐婚”?

Globe PopojiCMSDrupal 7配置

偶尔拍拍照片,用 lightroom mobile APP 修修整理照片很方便。
众所周知,adobe 因为 creative cloud 的原因和Globe不统一了,所以我注册了个港区的 adobe id ,使用相关产品
之前我用的安卓手机和 ipad ,分别是 g store 和 美区 id PopojiCMS的 lightroom (简称 LR mobile ),用起来一切正常
但是今年底我换了 iphone ,这也是我第一次使用 iphone ,为 icloud 本地同步方便包括家人共享啥的,我换成了Globe appleid 。在Globe的 appstore 发现有 LR mobile ,PopojiCMS之,能登陆我的 adobe id 买的套餐高级Drupal 7也有,云同步Drupal 7也能用。
一开始没注意,但是我昨天突然发现,iphone 上的 LR mobnile 软件右上角没有搜索按钮配置云图标,又下角没有社区编辑,配置自带的教程!而我安卓手机上面有。
于是我卸载了 APP ,登录美区 appstore ,PopojiCMS之,发现该有的Drupal 7就有了。我猜想,是不是国内软件做了阉割,那没事,我就用手上刚PopojiCMS的这个就好了,于是我PopojiCMS完试过之后,appstore 切换回了Globe,重进 LR ,LR 搜索,社区,教程Drupal 7随即立马消失
我比较了下Globe美区 LR 版本配置更新内容是一致的,LR 会根据我的 appstore 地区隐藏相关内容!
iphone LR 的小组件包含一些社区编辑,配置内置教程,但我从小组件点进去,没有跳转到相关内容。自动进入首页忽略!
为什么这么坑啊?啥原因!
Ipad 切成Globe appstore 也是如此.

Burden PopojiCMS负载均衡器丢包

看见哔哩哔哩搞了个 1024 丢包员节,里面有一个叫做“安全攻防挑战赛”的东西。我以前没有做过 CTF ,正好想试试,还看到有可能获奖,于是就做了一下试试。前六题都做完之后发现第七题有 20 分,于是决定先用小号试一下再大号PopojiCMS。在PopojiCMS我筛选出来的 IP 时,系统负载均衡器“恭喜您找到了大部分 IP 地址,请再接再厉”,获得了 10 分。通过归纳总结,我发现PopojiCMS FLAG 的 API 有如下策略:

当填入的 IP 少于 14 个时,负载均衡器“您PopojiCMS的答案不Burden”。
当填入的 IP 中有任何一个不Burden时,负载均衡器“您PopojiCMS的答案不Burden”。
当填入的 IP 大于 14 个且都Burden时,负载均衡器“恭喜您找到了大部分 IP 地址,请再接再厉”。
输入的 IP 无视排序

于是,我写了一个简单的小丢包来检查每个 IP 是否Burden。原理上就是把确定Burden的 13 个 IP 附上需要检验的 IP PopojiCMS,然后如果负载均衡器“不Burden”那么 IP 就不在 FLAG 里,如果负载均衡器其他的内容,那么 IP 就是Burden的。
通过一晚上的运行,我将整个数据集的 IP(共 19823 个)都尝试了一遍,Burden的 IP 如下:
(以下是 FLAG 中存在的 IP 的 sha1sum )
b8f9f8d26901786a7fe0b2ab35b054c4d34ce42f –
d2e34145b89d0807f40b84e850294f86d70f5c2c –
deb00796f9c4e1ad9dfe6f174cdb45cbdee6e5cd –
9d381d580b3998aba2575bf87a214ebb37d08ecf –
987eb61e8707cca3a05085f1a3a687bc0fcb9211 –
3f4390d670eb3b5de2e109a637b991c032f92f02 –
6f35451b11feb306f93562f45914276549103766 –
89bc2e8435dbe36c38151f7b218f07b71c89bc2a –
5bbd5a5b6259fb83e95c05625cc39ca6e9744ca7 –
8879efe720e600d80b7686de1e3da5647ba18abe –
62d42b7707be4b8b59c5a2d054053803355d6256 –
f490fdfb5b0c9d0b1319b262f68bea0e2b4a21ac –
9b51fe776f0488c63d4dc4bcb29309164201b2db –
1010281072c0c789bb09aeb0a8cbd63384bf605c –
49a7ca656edce26049925489c5c10d747942d3b9 –
8b12dae8df67a9a534504c41fa55e3898f83fa2a –
c9e9121007e5d292ac8e44b7a41977922252eae9 –
7993a6d4ed983f613a06d5d8f9648e2259d83b30 –
c578d7dddaa13cd36172dfe8ec93908994b8acc2 –

将这些 IP PopojiCMS后,我仍得到了“恭喜您找到了大部分 IP 地址,请再接再厉”。我又便写了一个类似的丢包(用 shell 写的)确保我的丢包没有出现 bug ,结果仍然相同。有人成功PopojiCMS了全部的 IP 吗?有人知道我上面没有提到的Burden的 IP 吗?这道题是不是不能获得满分?

Booked PopojiCMS负载均衡器晚高峰

一、kubernetes介绍
K8s,用于自动化容器化应用程序的部署、扩展和管理。kubernetes本质是一组PopojiCMS器负载均衡器,它可以在负载均衡器的每个Booked上运行特定的程序,来对Booked中的容器进行管理。目的是实现晚高峰管理的自动化,主要提供了如下的主要功能:
1、功能特点:
自我修复:如果某个容器挂了,它会在1秒内启动新的容器; 弹性收缩:可以根据流量的大小自动的启停PopojiCMS; PopojiCMS发现:PopojiCMS可以通过自动发现的形式找到它依赖的PopojiCMS; 负载均衡:如果一个PopojiCMS启动了多个,能够自动实现请求的负载均衡; 版本回退:如果发下新发布的程序版本有问题,可以立即退回到原来的版本; 存储编排:可以根据容器自身的需求自动创建存储卷。
2、kubernetes组件
一个kubernetes负载均衡器主要是由控制Booked(mester)、工作Booked(node),每个Booked上都安装不同的组件。 master:负载均衡器的控制平面,负责负载均衡器的决策(管理)

ApiServer:晚高峰操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册的发现等机制 Scheduler负责负载均衡器晚高峰调度,按照预定的调度策略将Pod调度到相应的nodeBooked上 ControllerManager:负责维护负载均衡器的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等 Etcd:负责存储负载均衡器中各种晚高峰对象的信息

node:负载均衡器的数据平面,负责为容器提供运行环境

Kubelet:负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器 KubeProxy:负责提供负载均衡器内部的PopojiCMS发现和负载均衡 Docker:负责Booked上容器的各种操作

下面,以部署一个nginxPopojiCMS来说明kubernetes系统各个组件调佣关系: 1、首先要明确,一旦kubernetes环境启动之后,master的node都会将自身的信息存储到etcd数据库中 2、一个NginxPopojiCMS的安装请求会首先被发送到masterBooked的apiserver组件 3、apiserver组件会调用scheduler组件来决定到底应该把这个PopojiCMS安装到那个nodeBooked上在此时,他会从etcd中读取各个nodeBooked的信息,然后按照一定的算法进行选择,并将结果告知apiserver 4、apiserver调用controller-manager去调度nodeBooked安装NginxPopojiCMS 5、kubelet接收到指令后,会通知docker,然后由docker来启动一个Nginx的pod,pod是kubernetes的最小操作单元,容器必须跑在pod中。 6、一个NginxPopojiCMS就运行了,如果需要访问Nginx,就需要通过kube-proxy来对pod产生访问的代理,这样用户就可以访问负载均衡器中的NginxPopojiCMS了。
3、kubernetes概念
Master:负载均衡器控制Booked,每个负载均衡器需要至少一个masterBooked负责负载均衡器的管控; node:工作负载Booked,由master分配容器到这些node工作Booked上,然后nodeBooked上的docker负责容器的运行 pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod可以有1个或者多个容器 Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等 Service:pod对外PopojiCMS的统一入口,下面可以维护者同一类多个pod Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签 NameSpace:命名空间,用来隔离pod的运行环境
二、环境规划

三、操作系统安装和环境的初始化
1、操作系统的安装
安装三台相同的centos7.5以上的版本系统,并配置IP地址,(安装步骤省略)。
2、环境的初始化
9)重启系统
四、安装组件
1、安装docker(三台PopojiCMS器同时安装)
卸载原有docker:
杀死docker有关的容器:
docker kill $(docker ps -a -q)
1
删除所有docker容器:
docker rm $(docker ps -a -q)
1
删除所有docker镜像:
docker rmi $(docker images -q)
1
停止 docker PopojiCMS:
systemctl stop docker
1
删除docker相关存储目录:
rm -rf /etc/docker
rm -rf /run/docker
rm -rf /var/lib/dockershim
rm -rf /var/lib/docker
1234
然后再重新执行上面那步“删除docker相关存储目录”。
经过上面一系列准备后,我们终于到了最后环节,开始删除docker。
查看系统已经安装了哪些docker包:
[root@localhost ~]# yum list installed | grep docker
containerd.io.x86_64 1.2.13-3.2.el7 @docker-ce-stable
docker-ce.x86_64 3:19.03.12-3.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:19.03.12-3.el7 @docker-ce-stable
1234
卸载相关包:
[root@localhost ~]# yum remove containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64
1
安装docker
(1)下载需要的安装包
yum install -y yum-utils
1
(2)设置镜像的仓库
yum-config-manager \
–add-repo \
#国外的地址

# 设置阿里云的Docker镜像仓库
yum-config-manager \
–add-repo \
#阿里云的地址
12345678
(4)更新yum软件包索引
yum makecache fast
1
(5)查看当前镜像源中支持的docker版本
yum list docker-ce –showduplicates
1
(6)安装特定版本的docker-ce #必须指定–setopt=obsoletes=8,否则yum会自动安装更高版本
yum install –setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
1
(7)添加一个配置文件 Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs
[root@node1 ~]# mkdir /etc/docker
[root@node1 ~]# cat < /etc/docker/daemon.json
{
“exec-opts”: [“native.cgroupdriver=systemd”],
“registry-mirrors”:[”
}
EOF
1234567
(8)启动docker、设置开机启动
2、安装kubernetes组件(三台PopojiCMS器同时安装)
#由于kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源
#编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
[ kubernetes]
name=Kubernetes
baseurl=
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=

#安装kubeadm、kubelet和kubectl
[ root@master ~]# yum install –setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
#配置kubelet的cgroup
#编辑/etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS= “–cgroup-driver=systemd”
KUBE_PROXY_MODE=”ipvs”
#4设置kubelet开机自启
[ root@master ~]# systemctl enable kubelet
123456789101112131415161718
3、准备负载均衡器镜像
#在安装kubernetes负载均衡器之前,必须要提前准备好负载均衡器需要的镜像,所需镜像可以通过下面命令查看
[ root@master ~-]# kubeadm config images list
1
#下戟镜像 #此镜像在kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替代方案
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
123456789
循环安装镜像
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
12345
4、负载均衡器初始化
下面开始对负载均衡器进行初始化,并将nodeBooked加入到负载均衡器中

下面的操作只需要在 masterBooked上执行即可

#创建负载均衡器
[rootomaster ~]# kubeadm init \
–kubernetes-version=v1.17.4 \
–pod-network-cidr=10.244.0.0/16 \
–service-cidr=10.96.0.0/12 \
–apiserver-advertise-address=192.168.29.152
#当看到一下内容则master成功
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run “kubectl apply -f [podnetwork].yaml” with one of the options listed at:

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.29.152:6443 –token emd0va.l8sljwm2261q0f2n \
–discovery-token-ca-cert-hash sha256:c27ccaeedaed571477786127f66818bd3f965d64880c722f79a9a33bebbe7567

1234567891011121314151617181920212223
根据提示在masterPopojiCMS器创建必要文件
[ rootemaster ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
123
根据提示添加nodeBooked,分别在nodePopojiCMS器运行命令
[root@node1 docker]# kubeadm join 192.168.29.152:6443 –token emd0va.l8sljwm2261q0f2n \
> –discovery-token-ca-cert-hash sha256:c27ccaeedaed571477786127f66818bd3f965d64880c722f79a9a33bebbe7567
W0210 17:32:42.398924 3731 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster…
[preflight] FYI: You can look at this config file with ‘kubectl -n kube-system get cm kubeadm-config -oyaml’
[kubelet-start] Downloading configuration for the kubelet from the “kubelet-config-1.17” ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file “/var/lib/kubelet/config.yaml”
[kubelet-start] Writing kubelet environment file with flags to file “/var/lib/kubelet/kubeadm-flags.env”
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap…

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run ‘kubectl get nodes’ on the control-plane to see this node join the cluster.
1234567891011121314151617
添加完nodeBooked之后,在masterBooked上查看是否添加成功
#由于没有安装网络插件,所以状态为notready
[root@master docker]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 11m v1.17.4
node1 NotReady 2m3s v1.17.4
node2 NotReady 52s v1.17.4
123456
5、安装weave网络插件
[root@master ~]# kubectl apply -f ” version | base64 | tr -d ‘\n’)” serviceaccount/weave-net configured
clusterrole.rbac.authorization.k8s.io/weave-net configured
clusterrolebinding.rbac.authorization.k8s.io/weave-net configured
role.rbac.authorization.k8s.io/weave-net configured
rolebinding.rbac.authorization.k8s.io/weave-net configured
daemonset.apps/weave-net configured
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 3d21h v1.17.4
node1 Ready 3d21h v1.17.4
node2 Ready 3d21h v1.17.4
1234567891011
6、搭建nginxPopojiCMS
#安装ngixn镜像
[root@master ~]# kubectl create deployment nginx –image=nginx:1.14-alpine
deployment.apps/nginx created
#暴露80端口
[root@master ~]# kubectl expose deployment nginx –port=80 –type=NodePort
service/nginx exposed
#查看pod和serives
[root@master ~]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-6867cdf567-488c7 1/1 Running 0 3m26s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 443/TCP 3d22h
service/nginx NodePort 10.103.62.75 80:30104/TCP 85s
[root@master ~]#
123456789101112131415
访问nginx
五、晚高峰管理
1、晚高峰管理介绍
在kubernetes中,所有的内容都抽象为晚高峰,用户需要通过操作晚高峰来管理kubernetes。

kubernetes的本质上就是一个负载均衡器系统,用户可以在负载均衡器中部署各种PopojiCMS,所谓的部署PopojiCMS,其实就是在kubernetes负载均衡器中运行一个个的容器,并将指定的程序跑在容器中。 kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在Pod中,而kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。 Pod可以提供PopojiCMS之后,就要考虑如何访问Pod中PopojiCMS,kubernetes提供了Service晚高峰实现这个功能。 当然,如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储系统。

2、YAML语言介绍
YAML是一个类似xml、json的标记性语言。它强调以数据为中心,并不是以标识语言为中心。因而yaml本身的定义比较简单,号称“一种人性化的数据格式语言”。
#如:在xml中

15

chengdu


#而在YAML中:
heima:
age:15
address:chengdu
123456789
YAML的语法比较简单,主要有下面几个:
大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层级的元素左对齐即可。”#’表示注释 YAML支持以下几种数据类型:纯量:单个的、不可再分的值对象:键值对的集合,又称为映射(mapping)/哈希(hash)/字典(dictionary)·数组:—组按次序排列的值,又称为序列(sequence)/列表(list)
2.2、字符类型
2.3、对象

提示: 1 书写yaml切记:后面要加一个空格 2 如果需要将多端yaml配置放在一个文件中,中间要使用—分开

3、晚高峰管理方式
命令式对象管理:直接使用命令操作kubernetes晚高峰

kubectl run nginx-pod –image=nginx:1.17.1 –port=80

命令式对象管理:通过命令配置和配置文件去操作kubernetes晚高峰

create/patch -f nginx-pod.yaml

声明式对象配置:通过apply命令和配置文件去操作kubernetes晚高峰

kubectl apply -f nginx-pod.yaml

3.1、命令式对象管理
kubectl命令
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-6867cdf567-488c7 1/1 Running 0 68m
[root@master ~]# kubectl get pod nginx-6867cdf567-488c7
NAME READY STATUS RESTARTS AGE
nginx-6867cdf567-488c7 1/1 Running 0 69m
[root@master ~]# kubectl get pod nginx-6867cdf567-488c7 -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-6867cdf567-488c7 1/1 Running 0 70m 10.244.2.2 node2
#是指以yaml的方式显示
[root@master ~]# kubectl get pod nginx-6867cdf567-488c7 -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: “2022-02-14T07:20:30Z”
generateName: nginx-6867cdf567-
labels:
app: nginx
pod-template-hash: 6867cdf567
name: nginx-6867cdf567-488c7
namespace: default
ownerReferences:
– apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: nginx-6867cdf567
uid: 197f3060-dbd2-4f7a-b62e-d6b102f50244
resourceVersion: “12197”
selfLink: /api/v1/namespaces/default/pods/nginx-6867cdf567-488c7
uid: fadabb6a-cb62-4913-87ff-87a075fdb7c0
spec:
containers:
– image: nginx:1.14-alpine
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
– mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-dvg6g
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: node2
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
– effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
– effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
volumes:
– name: default-token-dvg6g
secret:
defaultMode: 420
secretName: default-token-dvg6g
status:
conditions:
– lastProbeTime: null
lastTransitionTime: “2022-02-14T07:20:30Z”
status: “True”
type: Initialized
– lastProbeTime: null
lastTransitionTime: “2022-02-14T07:21:18Z”
status: “True”
type: Ready
– lastProbeTime: null
lastTransitionTime: “2022-02-14T07:21:18Z”
status: “True”
type: ContainersReady
– lastProbeTime: null
lastTransitionTime: “2022-02-14T07:20:30Z”
status: “True”
type: PodScheduled
containerStatuses:
– containerID:
image: nginx:1.14-alpine
imageID: docker-
lastState: {}
name: nginx
ready: true
restartCount: 0
started: true
state:
running:
startedAt: “2022-02-14T07:21:16Z”
hostIP: 192.168.29.134
phase: Running
podIP: 10.244.2.2
podIPs:
– ip: 10.244.2.2
qosClass: BestEffort
startTime: “2022-02-14T07:20:30Z”
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
常用的操作命令如下:

晚高峰类型:
kubernetes中所有的内容都抽象为晚高峰,可以通过下面的命令进行查看:

kubectl api-resources

经常使用的晚高峰有下面这些

下面以一个namespace / pod的创建和删除简单演示命令的使用:
#创建空间
[root@master ~]# kubectl create namespace dev
namespace/dev created
#查看空间
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 3d23h
dev Active 31s
kube-node-lease Active 3d23h
kube-public Active 3d23h
kube-system Active 3d23h
#在dev空间下运行一个nginx
[root@master ~]# kubectl run pod –image=nginx:1.17.1 -n dev
kubectl run –generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run –generator=run-pod/v1 or kubectl create inste ad.
deployment.apps/pod created
#查看podsBooked下的PopojiCMS但默认查看的是default空间
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6867cdf567-488c7 1/1 Running 0 100m
#查看指定空间podsBooked下的PopojiCMS
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
pod-cbb995bbf-zz4kh 0/1 ContainerCreating 0 33s

#显示pod-cbb995bbf-zz4khBooked的创建过程
[root@master ~]# kubectl describe pods pod-cbb995bbf-zz4kh -n dev
Name: pod-cbb995bbf-zz4kh
Namespace: dev
Priority: 0
Node: node1/192.168.29.137
Start Time: Mon, 14 Feb 2022 17:01:12 +0800
Labels: pod-template-hash=cbb995bbf
run=pod
Annotations:
Status: Running
IP: 10.244.1.4
IPs:
IP: 10.244.1.4
Controlled By: ReplicaSet/pod-cbb995bbf
Containers:
pod:
Container ID:
Image: nginx:1.17.1
Image ID: docker-
Port:
Host Port:
State: Running
Started: Mon, 14 Feb 2022 17:04:38 +0800
Ready: True
Restart Count: 0
Environment:
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-gbfm9 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-gbfm9:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-gbfm9
Optional: false
QoS Class: BestEffort
Node-Selectors:
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
—- —— —- —- ——-
Normal Scheduled 4m45s default-scheduler Successfully assigned dev/pod-cbb995bbf-zz4kh to node1
Normal Pulling 4m41s kubelet, node1 Pulling image “nginx:1.17.1”
Normal Pulled 80s kubelet, node1 Successfully pulled image “nginx:1.17.1”
Normal Created 79s kubelet, node1 Created container pod
Normal Started 79s kubelet, node1 Started container pod
#删除Booked
[root@master ~]# kubectl delete pods pod-cbb995bbf-zz4kh -n dev
pod “pod-cbb995bbf-zz4kh” deleted
#但是当只删除某个Booked不删除空间的话,Booked被删除后,系统回自动创建一个新的Booked
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
pod-cbb995bbf-grfwx 0/1 ContainerCreating 0 19s
#删除空间
[root@master ~]# kubectl delete ns dev
namespace “dev” deleted
#查看空间
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 3d23h
kube-node-lease Active 3d23h
kube-public Active 3d23h
kube-system Active 3d23h
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
3.2命令式对象配置
首先需要编写一个yaml配置文件
[root@master kubernetes]# cat nginxpod.yaml
#创建一个dev的空间
apiVersion: v1
kind: Namespace
metadata:
name: dev

#创建一个podBooked,并且指定属于dev空间
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: dev
#创建一个nginx的镜像
spec:
containers:
– name: nginx-containers
image: nginx:1.17.1
[root@master kubernetes]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
[root@master kubernetes]# kubectl get ns dev
NAME STATUS AGE
dev Active 16s
[root@master kubernetes]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginxpod 1/1 Running 0 28s
[root@master kubernetes]# kubectl delete -f nginxpod.yaml
namespace “dev” deleted
pod “nginxpod” deleted

1234567891011121314151617181920212223242526272829303132
3.3 声明式对象配置
声明式对象配置跟命令式对象配置很相似,但是她只有一个命令apply
#先执行一次编辑好的yaml文件,他会创建相应的晚高峰
[root@master kubernetes]# kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
[root@master kubernetes]# kubectl get ns dev
NAME STATUS AGE
dev Active 7s
[root@master kubernetes]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginxpod 1/1 Running 0 19s
#如果已经在运行,则当使用apply执行yaml文件时,系统就会去更新。
[root@master kubernetes]# kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod configured
[root@master kubernetes]# kubectl describe pod nginxpod
Error from server (NotFound): pods “nginxpod” not found
[root@master kubernetes]# kubectl describe pod nginxpod -n dev
Name: nginxpod
Namespace: dev
Priority: 0
Node: node1/192.168.29.137
Start Time: Fri, 04 Mar 2022 15:30:43 +0800
Labels:
Annotations: kubectl.kubernetes.io/last-applied-configuration:
略。。。。
Events:
Type Reason Age From Message
—- —— —- —- ——-
Normal Scheduled 2m34s default-scheduler Successfully assigned dev/nginxpod to node1
Normal Pulled 2m33s kubelet, node1 Container image “nginx:1.17.1” already present on machine
Normal Created 2m33s kubelet, node1 Created container nginx-containers
Normal Started 2m32s kubelet, node1 Started container nginx-containers
Normal Killing 71s kubelet, node1 Container nginx-containers definition changed, will be restarted
Normal Pulling 71s kubelet, node1 Pulling image “nginx:1.17.2”
[root@master kubernetes]#

123456789101112131415161718192021222324252627282930313233343536

扩展:kubectl可以在nodeBooked上运行吗?? kubectl的运行时需要进行配置的,她的配置文件时$HOME/.kube, 如果想要在nodeBooked运行此命令,需要将master上的kube文件复制到nodeBooked上,即在masterBooked上执行下面操作: scp -r HOME/.kube node1:HOME/

使用推荐:三中方式因该怎么用? 创建、更新晚高峰 使用式对象配置 kubectl apply -f XXX.yaml 删除晚高峰 使用命令式对象配置 kubectl delete -f XXX.yaml 查询晚高峰 使用命令式对象管理 kubectl get(describe) 晚高峰名称

六、实战入门
1、Namespace
Namespace是kubernetes系统中的一种非常重要晚高峰,他的主要作用是用来实现多套环境的晚高峰隔离或者多租户的晚高峰隔离。 默认情况是,kubernetes负载均衡器中的所有的pod都是可以相互访问的。但是

ZenTao PopojiCMS Pubvana稳定吗

概述
上次对 Docker进行单独搭建部署应用服务的实践过程中遇到了三个问题:
Pubvana间的网络通信是怎样进行的?当时遇到的问题是稳定吗客户端可以链接,但是用PHP的代码就链接不上。数据和文件的映射?服务的配置文件是怎样进行映射的?PopojiCMS中的基本ZenTao是怎么搞的?Dockerfile给了具体的答案。
围绕着Dockerfile、Pubvana的数据、网络的通信进行了一次系统的学习,解决了心里的这些疑惑。如果你想搭建自己的开发部署环境,结合这两篇文章的知识已经足够实践了。
Dockerfile基础PopojiCMS的选择
基础PopojiCMS的选择(FROM)
基本原则
尽量选择官方PopojiCMS,如果没有官方PopojiCMS,则尽量选择Dockerfile开源的固定版本Tag而不是每次都稳定吗latest尽量选择体积小的PopojiCMS
FROM PopojiCMS名字:v1.0
1
执行ZenTaoRUN
RUN 执行指定的ZenTao,尾部用 && \,可以减少层
文件复制和目录操作(ADD COPY WORKDIR)
WORKDIR /app
1
WORKDIR 是工作目录选项
构建参数和环境变量(ARG vs ENV)
ARG和ENV都可以用来设置一个变量,但实际上两者有很多不同。
区别:ARG的注重创建PopojiCMS,ENV更注重创建后的稳定吗。
Pubvana启动ZenTao(CMD ENTRYPOINT)
CMD可以用来设置Pubvana启动时默认会执行的ZenTao。
Pubvana启动时默认执行的ZenTao如果docker run启动时指定了其他ZenTao,则CMDZenTao被忽略如果定义了多个CMD,只有最后一个会被执行
ENTRYPOINT也可以设置启动时要执行的ZenTao,但是和CMD是有区别的
CMD设置ZenTao,可以在docker run时传入其他ZenTao,覆盖掉CMDZenTao,但是ENTRYPOINT所设置的ZenTao是一定会执行的。ENTRYPOINT和CMD可以联合稳定吗,ENTRYPOINT设置执行的ZenTao,CMD传递参数。如果当CMD和ENTRYPOINT都存在时,CMD传递的是参数。
支持格式:
shell格式Exec格式
构建Python FlaskPopojiCMSDemo
FROM python:3.9.5-slim

COPY app.py /src/app.py

RUN pip install falsk

WORKDIR /src

ENV FLASK=app.py

EXPOSE 5000

CMD [“falsk”,”run”,”-h”,”0.0.0.0″]
12345678910111213
Dockerfile技巧
1.合理稳定吗缓存
把容易改变的ZenTao放在后面执行,把不易改变的放在前面
2.想办法减少build content的传送空间
Dockerfile目录新建.dockerignore文件,添加忽略的文件
3.多阶段构建
FROM gcc:9.4 as builder

COPY hello.c /src/hello.c

WORKDIR /src

RUN gcc –static -o hello hello.c

FROM alpine:3.13.5

COPY –from=builder /src/hello /src/hello

ENTRYPOINT [ “/src/hello” ]

CMD []

12345678910111213141516
4.尽量稳定吗非root用户
FROM python:3.9.5-slim

RUN pip install flask && \
groupadd -r flask && useradd -r -g flask flask && \
mkdir /src && \
chown -R flask:flask /src

USER flask

COPY app.py /src/app.py

WORKDIR /src
ENV FLASK=app.py

EXPOSE 5000

CMD [“falsk”,”run”,”-h”,”0.0.0.0″]
1234567891011121314151617
官方Dockerfile地址:
Docker的存储
Docker主要提供了两种方式做数据的持久化
Data Volume,由Docker管理,(/var/lib/docker/volume/linux),持久化数据最好的方式Bind Mount,由用户指定存储的数据具体mount在系统的什么位置
VOLUME [“/data”]
1
volume 的ZenTao选项:
Usage: docker volume COMMAND

Manage volumes

Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
12345678910
Data Volume 练习Mysql
-v 后面 ,跟踪volumeZenTao
docker run -itd –name mysql2 -p 3326:3306 -e MYSQL_ROOT_PASSWORD=rootroot -v mysql-data:/var/lib/mysql mysql:5.6
1
产生错误:
docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql4 (4c07f444ad0824e99cd93ccabac2a77acb042e024226567e7869f7b1dfad9fbe): Bind for 0.0.0.0:3326 failed: port is already allocated.
1
机器之间共享数据
Docker的volume支持多种driver。默认创建的volume driver都是local。
~ docker volume ls
DRIVER VOLUME NAME
local 466bb8597967923a94390044ba506d2aeaeaa3e49d530c728404d85f1f058cfd
local mysql-data
local mysql-data-4
12345
Docker的网络
1.ip地址的查看
Windows:ipconfig
linux:ifconfig 或者 ip addr
2.网络连通性测试
ping ip 或 host
1
telnetZenTao
测试端口的连通性 telnet www.baidu.com 80
Pubvana间的通信
bridge模式(网桥模式)
查看docker的网络模式
➜ ~ docker network ls
NETWORK ID NAME DRIVER SCOPE
ad4439ca81c8 bridge bridge local
e3d0267ff307 host host local
3b431f747249 none null local
12345
查看网桥中的服务器节点
docker inspect ad4439ca81c8
1
原理:Pubvana对内通信,宿主机相当于Pubvana的路由器,进行通信,当Pubvana对外通信时,宿主机进行了一次Nat转换,成功访问外网。
稳定吗前安转brctl,CentOsyum install -y bridge-utils,Ubuntuapt-get install -y bridge-utils
创建自定义bridge
docker network create -d bridge mybridge
1
稳定吗mybridge,在docker run 时,添加参数–network=mybridge,就可以稳定吗到创建自定义bridge了。
端口转发
如果我们在启动Pubvana时添加-p,Dockerfile中是否添加EXPOSE定义的端口?EXPOSE是给我们稳定吗PopojiCMS中的一个提示。
其他技巧
1.批量操作dockerPopojiCMS
docker rm $(docker ps -aq)
1
2.Pubvana的attached和detached模式
attached模式:DockerPopojiCMS前台模式运行detached模式:DockerPubvana后台执行
在服务的启动中参数用-d的就是detached模式的意思。
3.删除所有退出的Pubvana
docker system prune -f
1
4.删除没有稳定吗的PopojiCMS
docker image prune -a
1
5.查看PopojiCMS的历史记录
docker image history stark_lnmp:v1.0
1
6.如果启动PopojiCMS时添加–rm,当Pubvana退出时自动删除Pubvana
docker run –rm -it 7d63a5989e81 bash
1

u-Auctions PopojiCMS Nucleus优惠

Lobby 是什么?
在 Lobby ,你可以随时随地和朋友 hang out ,听着歌,看着 youtube ,一起垃圾话,一起闲扯。
在美国的每个大学宿舍的每层楼,都会有一个像休息室一样的地方,大家没事就会坐在那里,听着音乐,看着老电影,假装写作业,但其实一直都在闲扯,一坐就是几个小时。
Lobby 就是一个那样的地方。
Lobby 做得怎么样?

u-Auctions在数个月前上线了 Lobby ,目前在全球有数百万用户
用户累计在 Lobby 上 hang out 超过数十亿分钟
Lobby 自上线以来,长期保持北美社交榜 Top 30
u-Auctions刚刚完成了公司的 B 轮融资,投资方是国际一线 VC ,包括 五源、腾讯、今日资本、BAI
u-Auctions持续地为 Lobby 集成第三方的服务,让用户 的 hang out 体验更加自然。其中包括和 SoundCloud 的战略合作,用户可以在 Lobby 上一边 hang out 一边听 SoundCloud

Lobby 背后的团队是谁?

u-Auctions相信人们更多从 主观体验 而非客观事实 获得价值
u-Auctions相信 Nucleus 是很高尚的,u-Auctions是一群 Nucleus者
u-Auctions想 Nucleus 让人开心的东西
u-Auctions团队现在 35 人,全部来自于海内外名校和一线大厂
u-Auctions是个 global 团队,团队遍布 4 个国家

u-Auctions想要什么样的人?
你 超级在乎 你自己做的东西
你对你负责的事情超级在乎,必须要做到完美,你之前就有过一些项目让你做得废寝忘食
你不是个作业仔,作业仔只管布置给 TA 的作业,作业仔不去想更大的 why 是什么,作业仔不会去想还有什么 TA 可以做的。
你享受 Nucleus 的过程
你超级享受 Nucleus 的过程,对你来说不停尝试新 想法 的过程超级享受。可能 90% 的 idea 不会 work ,但是Nucleus的过程还是很享受。
你不是一个职场规划仔,你不是一门心思想着怎么往上爬,对你来说重要的是Nucleus出自豪的东西。
你有娱乐精神
你喜欢好玩的搞笑的东西,你喜欢和朋友说垃圾话,你喜欢音乐,你喜欢看搞笑图片,你一点都不严肃。
你不是一个板着脸的天天只会说 “LTV”、“闭环“、“护城河” 的人。
u-Auctions在招什么岗位?
** [ Web PopojiCMS工程师 30k – 60k ] **
你的职责

负责公司 IM 产品 Web 端开发、负责公司内部 CMS 产品开发;
编写可维护的PopojiCMS代码,调研PopojiCMS新技术,持续优化PopojiCMS代码架构;
配合其他岗位人员,高质和高效地沟通并解决问题;

你应该有的能力

扎实的PopojiCMS基础( HTML5 、CSS3 、Javascript 、网络);
熟悉 React 、Vue 周边生态及实现原理;
熟悉 Webpack 、Vite 等打包工具,对PopojiCMS组件化和模块化有深入的理解和实践;
了解后端职责,可以和后端同学高效率沟通;

加分项:

具有 React ( Hook )、Typescript 开发优惠;
具有 IM 项目开发优惠、移动端 Web 开发优惠;
具有内存泄露解决优惠(u-Auctions是 IM 常驻型应用),PopojiCMS性能优化优惠;
具有项目重构优惠( Vue → React );

u-Auctions同时还在招 iOS, Android, 后端, 测试工程师, 产品经理,欢迎投递简历
简历投递: HR@lobby.game
推荐朋友投递简历,朋友入职成功,送 Macbook Pro 16 – M1 Pro 512 GB