Skip to content

Commit

Permalink
bigdata learn.
Browse files Browse the repository at this point in the history
  • Loading branch information
jsdu committed Oct 21, 2021
1 parent 399dc04 commit 9a4ddb0
Show file tree
Hide file tree
Showing 28 changed files with 3,269 additions and 10 deletions.
Binary file modified .metals/metals.h2.db
Binary file not shown.
6 changes: 3 additions & 3 deletions .metals/metals.lock.db
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#FileLock
#Wed Sep 22 17:29:49 CST 2021
#Fri Oct 15 09:41:27 CST 2021
hostName=localhost
id=17c0cd700a0b5142aab4b66f0afdeb6b2a9be99e1c8
id=17c819c767f7ea9b7b670bdd15b23b498648f26439f
method=file
server=localhost\:64459
server=localhost\:59565
10 changes: 10 additions & 0 deletions .metals/metals.log
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,13 @@
2021.09.22 17:29:51 INFO time: initialize in 4.58s
2021.09.22 17:29:51 WARN Build server is not auto-connectable.
2021.09.22 17:29:51 WARN no build tool detected in workspace 'D:\projects\funny\JsDu.io'. The most common cause for this problem is that the editor was opened in the wrong working directory, for example if you use sbt then the workspace directory should contain build.sbt. 
2021.10.13 09:07:35 INFO Started: Metals version 0.10.4 in workspace 'D:\projects\funny\JsDu.io' for client Visual Studio Code 1.61.0.
2021.10.13 09:07:42 INFO time: initialize in 7.39s
2021.10.13 09:07:42 WARN Build server is not auto-connectable.
2021.10.13 09:07:42 WARN no build tool detected in workspace 'D:\projects\funny\JsDu.io'. The most common cause for this problem is that the editor was opened in the wrong working directory, for example if you use sbt then the workspace directory should contain build.sbt. 
2021.10.15 09:41:21 INFO Started: Metals version 0.10.4 in workspace 'D:\projects\funny\JsDu.io' for client Visual Studio Code 1.61.0.
2021.10.15 09:41:28 INFO time: initialize in 6.54s
2021.10.15 09:41:28 WARN Build server is not auto-connectable.
2021.10.15 09:41:28 WARN no build tool detected in workspace 'D:\projects\funny\JsDu.io'. The most common cause for this problem is that the editor was opened in the wrong working directory, for example if you use sbt then the workspace directory should contain build.sbt. 
ʮ�� 18, 2021 3:52:39 ���� org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint notify
��Ϣ: Unsupported notification method: $/setTrace
28 changes: 27 additions & 1 deletion DevOps/Kubernetes/Kubernetes 概念.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,38 @@
# Kubernetes

Kubernetes 为你提供:

服务发现和负载均衡

Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

存储编排

Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

自动部署和回滚

你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

自动完成装箱计算

Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

自我修复

Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

密钥与配置管理

Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。


## Service
服务式分布式集群架构的核心, 一个Service对象拥有如下关键特征:
- 拥有一个唯一指定的名字
- 拥有一个虚拟IP和端口号
- 能够提供某种远程服务能力
- 被映射道了提供着中国服务能力的一组容器应用上
- 被映射了提供着服务能力的一组容器应用上

## Pod
Pod运行在我们称之为节点(Node)的环境中,这个节点既可以是物理机,也可以是私有云或者公有云中的一个虚拟机,通常在一个结点上运行几百个Pod.
Expand Down
164 changes: 164 additions & 0 deletions DevOps/Kubernetes/helm.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
# HELM

Helm 使用一种称为charts的打包格式。图表是描述一组相关 Kubernetes 资源的文件集合。单个图表可能用于部署一些简单的东西,比如 memcached pod,或者一些复杂的东西,比如带有 HTTP 服务器、数据库、缓存等的完整 Web 应用程序堆栈。

图表创建为在特定目录树中布置的文件。它们可以打包到要部署的版本化档案中。

如果您想下载并查看已发布图表的文件而不安装它,您可以使用helm pull chartrepo/chartname.

本文档解释了图表格式,并提供了使用 Helm 构建图表的基本指南。


https://helm.sh/

https://jimmysong.io/kubernetes-handbook/practice/helm.html

helm 安装官方仓库

https://github.com/helm/charts

https://github.com/helm/charts/issues/21103

https://artifacthub.io/


# helm 安装hadoop 安装 spark

https://github.com/JahstreetOrg/spark-on-kubernetes-helm

https://github.com/ifilonenko/hadoop-kerberos-helm

## 模板调试

```sh
helm lint 是验证chart是否遵循最佳实践的首选工具
helm install --dry-run --debug 或 helm template --debug:我们已经看过这个技巧了, 这是让服务器渲染模板的好方法,然后返回生成的清单文件。
helm get manifest: 这是查看安装在服务器上的模板的好方法。


```


https://helm.sh/docs/chart_template_guide/getting_started/

## helm 安装报错

just to add --generate-name at the end of helm command
```sh
helm install -n hdfs-pvs pv --generate-name

helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

helm repo remove stable

helm repo list

helm search repo prometheus-operator
```

配置国内源
https://www.cnblogs.com/a120608yby/p/10683502.html

https://www.chenshaowen.com/blog/configure-helm-mirror-in-china.html


https://stackoverflow.com/questions/57322873/how-to-fix-error-must-either-provide-a-name-or-specify-generate-name-in-he

## 使用helm 安装

```sh
# 使用安装
helm install --generate-name --namespace=hdfs-pvs pv
root@node1:/data/hadoop-kerberos-helm# helm install --generate-name --namespace=hdfs-pvs pv
Error: create: failed to create: namespaces "hdfs-pvs" not found
root@node1:/data/hadoop-kerberos-helm# helm version
version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"}

root@node1:/data/hadoop-kerberos-helm# kubectl version --short
Client Version: v1.19.8
Server Version: v1.19.8
```

在此期间删除命名空间创建的更改helm install是有意的。这是为了模仿与kubectl create --namespace foo -f deployment.yaml- 命名空间是全局集群资源相同的行为,并且将资源安装到该命名空间中的用户可能没有安装命名空间本身的适当管理权限,因为这意味着您对集群具有完全管理权限(如与在特定命名空间内绑定到具有受限权限的角色相反)。如果没有此更改,用户必须具有集群管理员权限才能安装图表,并且我们希望确保管理员可以确保用户在每次安装时只能应用一组受限的角色。这也是当初 TIller 被下架的一个重要原因。

此外,社区中有几个要求允许修改命名空间helm install创建(例如#3503),而支持此类用例的 UX 实现起来会非常痛苦。将命名空间创建卸载到单独的工具(可能是插件?)为用户提供了一种解决这些问题的方法,而无需围绕这些用例强加限制性的用户体验。

注意:我只是转发我所知道的关于这个主题的信息以及它被删除的原因。我建议向@adamreese询问更多有关删除理由的信息。


Helm 3 发生了变化,它现在从本地 kube 配置中获取当前命名空间。如果它不存在,则使用默认命名空间。

要更改 alpha 的当前命名空间,您可以使用

kubectl set-context NAME --namespace=foo
Helm 将在您下次调用它时选择并使用该命名空间。

Helm 3 中进行了一些设计重构,以解决从 CLI 标志和 kube 配置加载设置的优先级问题。据我了解,--namespace 标志已被暂时删除,但计划允许以某种方式即时更改命名空间。

@adamreese你还有什么其他的上下文我可能在这里遗漏了为什么我们删除了 --namespace 标志?

您好,正确切换不同上下文的命令应该是这样的:

kubectl config set-context CONTENT_NAME --namespace NAMESPACE
例子:

kubectl config set-context gke_xxx_top_us-east1-b_my-test --namespace qa

https://github.com/helm/helm/issues/5753

https://github.com/helm/helm/issues/5628

https://helm.sh/docs/intro/quickstart/

# kubctl

使用kubectl来管理Kubernetes集群。

```sh
kubectl annotate – 更新资源的注解。
kubectl api-versions – 以“组/版本”的格式输出服务端支持的API版本。
kubectl apply – 通过文件名或控制台输入,对资源进行配置。
kubectl attach – 连接到一个正在运行的容器。
kubectl autoscale – 对replication controller进行自动伸缩。
kubectl cluster-info – 输出集群信息。
kubectl config – 修改kubeconfig配置文件。
kubectl create – 通过文件名或控制台输入,创建资源。
kubectl delete – 通过文件名、控制台输入、资源名或者label selector删除资源。
kubectl describe – 输出指定的一个/多个资源的详细信息。
kubectl edit – 编辑服务端的资源。
kubectl exec – 在容器内部执行命令。
kubectl expose – 输入replication controller,service或者pod,并将其暴露为新的kubernetes service。
kubectl get – 输出一个/多个资源。
kubectl label – 更新资源的label。
kubectl logs – 输出pod中一个容器的日志。
kubectl namespace -(已停用)设置或查看当前使用的namespace。
kubectl patch – 通过控制台输入更新资源中的字段。
kubectl port-forward – 将本地端口转发到Pod。
kubectl proxy – 为Kubernetes API server启动代理服务器。
kubectl replace – 通过文件名或控制台输入替换资源。
kubectl rolling-update – 对指定的replication controller执行滚动升级。
kubectl run – 在集群中使用指定镜像启动容器。
kubectl scale – 为replication controller设置新的副本数。
kubectl stop – (已停用)通过资源名或控制台输入安全删除资源。
kubectl version – 输出服务端和客户端的版本信息。
```

https://www.kubernetes.org.cn/doc-45

https://kubernetes.io/docs/reference/kubectl/overview/


# ERROR

## no matches for kind "Deployment" in version "extensions/v1beta1"

```sh
修改 apiVersion 选项: apps/v1

[root@k8sm90 demo]# cat tomcat-deployment.yaml
apiVersion: apps/v1
kind: Deployment
...
```

https://www.cnblogs.com/nnylee/p/11779653.html
46 changes: 46 additions & 0 deletions DevOps/Kubernetes/k8scmd.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# k8s 命令

# namespace 相关

```sh
kubectl get ns

root@node1:/data/hadoop-kerberos-helm# kubectl get ns
NAME STATUS AGE
default Active 9d
kube-node-lease Active 9d
kube-public Active 9d
kube-system Active 9d
kubesphere-controls-system Active 9d
kubesphere-monitoring-federated Active 9d
kubesphere-monitoring-system Active 9d
kubesphere-system Active 9d

# 获取指定namespace下的所有pod

kubectl get po --namespace kube-system
#
kubectl get po -n kube-system

# 创建namespace
kubectl create namespace custom-namespace
# 或者使用yaml文件进行创建
# custom-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: custom-namespace


root@node1:/data/hadoop-kerberos-helm# kubectl create namespace hdfs-pvs
namespace/hdfs-pvs created
root@node1:/data/hadoop-kerberos-helm# helm install --generate-name --namespace=hdfs-pvs pv
NAME: pv-1633690868
LAST DEPLOYED: Fri Oct 8 19:01:08 2021
NAMESPACE: hdfs-pvs
STATUS: deployed
REVISION: 1
TEST SUITE: None
```

helm install --generate-name --namespace=hdfs-kdc kdc
19 changes: 19 additions & 0 deletions DevOps/Kubernetes/kerberos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# kerberos 认证

Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成:Key Distribution Center (即KDC)、Client 和 Service。

客户端会先访问两次KDC,然后再访问目标Service,如:HTTP服务。

Key Distribution Center(即 KDC), 是 Kerberos 的核心组件,主要由三个部分组成:

- Kerberos Database: 包含了一个 Realm 中所有的 principal、密码与其他信息。(默认:Berkeley DB)
- Authentication Service(AS): 进行用户信息认证,为客户端提供 Ticket Granting Tickets(TGT)。
- Ticket Granting Service(TGS): 验证 TGT 与 Authenticator,为客户端提供 Service Tickets。

https://zhuanlan.zhihu.com/p/266491528

http://www.h3c.com/cn/d_201309/922101_30005_0.htm

# flink on k8s

https://www.infoq.cn/article/TK7f60T0Kbt82Oh0mka5
76 changes: 76 additions & 0 deletions DevOps/Kubernetes/kubernetes.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# kubernetes

k8s的历史

https://jimmysong.io/kubernetes-handbook/cloud-native/kubernetes-history.html


https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/



云计算从宏观上分为以下三种类型:

IaaS:这是为了想要建立自己的商业模式并进行自定义的客户,例如亚马逊的EC2、S3存储、Rackspace虚拟机等都是IaaS。
PaaS:工具和服务的集合,对于想用它来构建自己的应用程序或者想快速得将应用程序部署到生产环境而不必关心底层硬件的用户和开发者来说是特别有用的,比如Cloud Foundry、Google App Engine、Heroku等。
SaaS:终端用户可以直接使用的应用程序。这个就太多,我们生活中用到的很多软件都是SaaS服务,只要基于互联网来提供的服务基本都是SaaS服务,有的服务是免费的,比如Google Docs,还有更多的是根据我们购买的Plan和使用量付费,比如GitHub、各种云存储。

## Docker 和K8s的兼容性

Kubernetes 1.9 <--Docker 1.11.2 to 1.13.1 and 17.03.x
Expand All @@ -26,3 +41,64 @@ Kubernetes 1.5 <--Docker 1.10.3, 1.11.2, 1.12.3
[k8s本地开发](https://blog.qikqiak.com/post/skaffold-simple-local-develop-k8s-app-tools/)

https://kubesphere.io/docs/advanced-v2.0/zh-CN/introduction/architecture/


https://tech.meituan.com/2020/08/13/openstack-to-kubernetes-in-meituan.html

# 数据包在k8s中的一生


https://blog.fleeto.us/post/life-of-a-packet-in-k8s-1/

https://github.com/containernetworking/cni/blob/master/SPEC.md

## minikube

Minikube是由Kubernetes社区维护的单机版的Kubernetes集群,支持macOS, Linux, and Windows等多种操作系统平台,使用最新的官方stable版本,并支持Kubernetes的大部分功能,从基础的容器编排管理,到高级特性如负载均衡、Ingress,权限控制等。非常适合作为Kubernetes入门,或开发测试环境使用。

https://minikube.sigs.k8s.io/docs/

https://zhuanlan.zhihu.com/p/112755080

## K8s 部署spark History Server

https://cloud.tencent.com/developer/inventory/9360


## k8s 报错

## k8s创建Deployment报错:no matches for kind “Deployment“ in version “extensions/v1beta1“

```sh
修改 apiVersion 选项: apps/v1

[root@k8sm90 demo]# cat tomcat-deployment.yaml
apiVersion: apps/v1
kind: Deployment
...
因为我的 k8s 版本是 1.16.2,在这个版本中 Deployment 已经从 extensions/v1beta1 弃用

DaemonSet, Deployment, StatefulSet, and ReplicaSet resources will no longer be served from extensions/v1beta1, apps/v1beta1, or apps/v1beta2 by default in v1.16.
```

https://github.com/Azure/AKS/issues/1205

https://www.cnblogs.com/nnylee/p/11779653.html


## error validating "": error validating data: apiVersion not set

```sh
root@node1:/data/hadoop-kerberos-helm# helm install --generate-name --namespace=hdfs-kdc kdc
Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec

root@node1:/data/hadoop-kerberos-helm# helm install --generate-name --namespace=hdfs-kdc kdc
Error: Deployment.apps "kerberos" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"kerberosService":"kerberos", "name":"hdfs-kerberos"}: `selector` does not match template `labels`

root@node1:/data/hadoop-kerberos-helm# helm install --generate-name --namespace=hdfs-kdc kdc
Error: rendered manifests contain a resource that already exists. Unable to continue with install: Service "kerberos" in namespace "hdfs-kdc" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: key "meta.helm.sh/release-name" must equal "kdc-1633691647": current value is "kdc-1633691595"
```

# 优秀博客

https://xinchen.blog.csdn.net/article/details/105086794
Loading

0 comments on commit 9a4ddb0

Please sign in to comment.