瀏覽代碼

完成了list的源码分析
增加了云平台的安装文档

seamew 3 年之前
父節點
當前提交
193b663382
共有 24 個文件被更改,包括 410 次插入15 次删除
  1. 1 1
      linux/centos网络配置.md
  2. 118 0
      后端/JAVA高阶/ArrayList/ArrayList源码分析.md
  3. 1 2
      大数据/docker/2.centos7安装docker.md
  4. 二進制
      大数据/云平台安装文档/assets/image-20211108145729544.png
  5. 二進制
      大数据/云平台安装文档/assets/image-20211108154405864.png
  6. 二進制
      大数据/云平台安装文档/assets/image-20211110154335629.png
  7. 二進制
      大数据/云平台安装文档/assets/image-20211110155332792.png
  8. 二進制
      大数据/云平台安装文档/assets/image-20211110230053303.png
  9. 二進制
      大数据/云平台安装文档/assets/image-20211110230128121.png
  10. 二進制
      大数据/云平台安装文档/assets/image-20211110230429326.png
  11. 二進制
      大数据/云平台安装文档/assets/image-20211110231108730-16365570741011.png
  12. 二進制
      大数据/云平台安装文档/assets/image-20211110231108730.png
  13. 二進制
      大数据/云平台安装文档/assets/image-20211110231233626.png
  14. 二進制
      大数据/云平台安装文档/assets/image-20211110231456317.png
  15. 二進制
      大数据/云平台安装文档/assets/image-20211110231532251.png
  16. 二進制
      大数据/云平台安装文档/assets/image-20211110232452207.png
  17. 二進制
      大数据/云平台安装文档/assets/image-20211110232708879.png
  18. 二進制
      大数据/云平台安装文档/assets/image-20211111101212415.png
  19. 二進制
      大数据/云平台安装文档/assets/image-20211111101337952.png
  20. 二進制
      大数据/云平台安装文档/assets/image-20211111101803181.png
  21. 二進制
      大数据/云平台安装文档/assets/image-20211111102250493.png
  22. 二進制
      大数据/云平台安装文档/assets/image-20211111102801129.png
  23. 二進制
      大数据/云平台安装文档/assets/image-20211111102817757.png
  24. 290 12
      大数据/云平台安装文档/安装云平台环境.md

+ 1 - 1
linux/centos网络配置.md

@@ -78,7 +78,7 @@ systemctl enable ntpd && systemctl start ntpd
 # 4.主机名称
 
 ```
-hostnamectl set-hostname  
+hostnamectl set-hostname  h
 ```
 
 # 5.界面控制

+ 118 - 0
后端/JAVA高阶/ArrayList/ArrayList源码分析.md

@@ -0,0 +1,118 @@
+## 概念回顾
+
+ArrayList:源码难点	扩容和缩容
+存放元素:有序
+线程是否安全:不安全
+核心方法:get(下标查询) add
+底层数据结构:数组基于object类型
+
+## 为什么get方法是index下标?
+
+时间复杂度的原因   O(1) O(n)  O(lgn)
+基于下标查询就是O(1)
+基于元素值查询就是O(n)-----链表
+
+## 扩容方法
+
+```
+private void ensureExplicitCapacity(int minCapacity) {
+	// 线程同步,不能在遍历的时候进行添加或者删除操作
+    modCount++;
+
+    // 判断是否需要扩容
+    if (minCapacity - elementData.length > 0)
+        grow(minCapacity);
+}
+```
+
+```
+private void grow(int minCapacity) {
+	// 初始化容量为0
+    int oldCapacity = elementData.length;
+    // 新的容量还是为0
+    int newCapacity = oldCapacity + (oldCapacity >> 1);
+    if (newCapacity - minCapacity < 0)
+    	// 新的容量为10,只有第一次初始化会走这个判断
+        newCapacity = minCapacity;
+    // 这个判断正常不会走
+    if (newCapacity - MAX_ARRAY_SIZE > 0)
+        newCapacity = hugeCapacity(minCapacity);
+    // 扩容
+    elementData = Arrays.copyOf(elementData, newCapacity);
+}
+```
+
+每次扩容,容量增加1.5倍
+
+## 缩容方法
+
+注意hashmap集合没有缩容,因为缩容需要重新计算index值
+基于value值删除复杂度为O(n),需要考虑缩容问题
+```
+public boolean remove(Object o) {
+    if (o == null) {
+        for (int index = 0; index < size; index++)
+            if (elementData[index] == null) {
+                fastRemove(index);
+                return true;
+            }
+    } else {
+        for (int index = 0; index < size; index++)
+            if (o.equals(elementData[index])) {
+                fastRemove(index);
+                return true;
+            }
+    }
+    return false;
+}
+```
+
+
+## 快速覆盖
+
+```
+private void fastRemove(int index) {
+	// 线程同步,不能在遍历的时候进行添加或者删除操作
+    modCount++;
+    // 计算删除index后面的所有元素有多少个
+    int numMoved = size - index - 1;
+    if (numMoved > 0)
+        System.arraycopy(elementData, index+1, elementData, index,
+                numMoved);
+    elementData[--size] = null; // clear to let GC do its work
+}
+```
+
+arraycopy(Object src,  int  srcPos,Object dest, int destPos,int length);
+
+Object src:原数组
+int  srcPos:从元数据的起始位置开始
+Object dest:目标数组
+int destPos:从目标数组的开始起始位置
+int length:要copy的数组长度
+
+## ArrayList与vector的区别
+
+相同点:都是基于数组实现,默认初始容量为10
+不同点:
+
+1. ArrayList线程不安全,vector线程安全。
+2. ArrayList扩容为原容量的1.5倍,vector为原来的2倍---capacityIncrement可以自定义扩容的大小
+
+## HashSet底层实现原理
+
+HashSet:基于HashMap实现
+
+思考点:
+HashSet为什么是无序的?因为HashMap的key不允许重复  hash+equals,hash值排  序
+HashSet底层数据结构模型:基于hashmap实现,key为hashset存放的元素,value是空值
+缺点:比较占用内存
+
+## LinkedList
+
+底层基于双向链表结构实现
+查询的时间复杂度为O(n)
+
+为什么需要一个变量记录头结点?
+为了后期遍历数据知道从哪里开始!
+

+ 1 - 2
大数据/docker/2.centos7安装docker.md

@@ -21,8 +21,7 @@ sudo tee /etc/docker/daemon.json <<-'EOF'
   "registry-mirrors": ["https://an54fymq.mirror.aliyuncs.com"]
 }
 EOF
-sudo systemctl daemon-reload
-sudo systemctl restart docker
+sudo systemctl daemon-reload &sudo systemctl restart docker
 ```
 
 # 3.docker权限问题

二進制
大数据/云平台安装文档/assets/image-20211108145729544.png


二進制
大数据/云平台安装文档/assets/image-20211108154405864.png


二進制
大数据/云平台安装文档/assets/image-20211110154335629.png


二進制
大数据/云平台安装文档/assets/image-20211110155332792.png


二進制
大数据/云平台安装文档/assets/image-20211110230053303.png


二進制
大数据/云平台安装文档/assets/image-20211110230128121.png


二進制
大数据/云平台安装文档/assets/image-20211110230429326.png


二進制
大数据/云平台安装文档/assets/image-20211110231108730-16365570741011.png


二進制
大数据/云平台安装文档/assets/image-20211110231108730.png


二進制
大数据/云平台安装文档/assets/image-20211110231233626.png


二進制
大数据/云平台安装文档/assets/image-20211110231456317.png


二進制
大数据/云平台安装文档/assets/image-20211110231532251.png


二進制
大数据/云平台安装文档/assets/image-20211110232452207.png


二進制
大数据/云平台安装文档/assets/image-20211110232708879.png


二進制
大数据/云平台安装文档/assets/image-20211111101212415.png


二進制
大数据/云平台安装文档/assets/image-20211111101337952.png


二進制
大数据/云平台安装文档/assets/image-20211111101803181.png


二進制
大数据/云平台安装文档/assets/image-20211111102250493.png


二進制
大数据/云平台安装文档/assets/image-20211111102801129.png


二進制
大数据/云平台安装文档/assets/image-20211111102817757.png


+ 290 - 12
大数据/云平台安装文档/安装云平台环境.md

@@ -1,34 +1,312 @@
 > [TOC]
 
-# 1.离线安装Docker及其相应组件(三台虚拟机都需要安装)
+# 1.安装前的准备工作
 
-## 1.1离线安装Docker
+## 1.1准备三台服务器
 
-首先创建```/opt/package```目录存放相应的安装包
-```mkdir /opt/package/```
+需要准备三台服务器并设置静态IP,这里不再赘述。本文档的配置如下
 
-其次,将安装包目录下的docker19-rpm.zip压缩包放到虚拟机的```/opt/package```目录下,进行解压缩操作,进入目录,使用命令
+| 节点名称 | ip             |
+| -------- | -------------- |
+| master   | 192.168.238.20 |
+| node1    | 192.168.238.21 |
+| node2    | 192.168.238.22 |
+
+## 1.2安装前的准备工作
+
+```
+# 关闭防火墙
+systemctl stop firewalld && systemctl disable firewalld
+
+# 关闭selinux
+sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
+setenforce 0  # 临时
+cat /etc/selinux/config
+
+# 关闭swap
+swapoff -a  # 临时
+sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
+free -m
+
+# 根据规划设置主机名
+hostnamectl set-hostname <hostname>
+
+# 在master添加hosts
+cat >> /etc/hosts << EOF
+192.168.238.20 master
+192.168.238.21 node1
+192.168.238.22 node2
+EOF
+
+# 将桥接的IPv4流量传递到iptables的链
+cat > /etc/sysctl.d/k8s.conf << EOF
+net.bridge.bridge-nf-call-ip6tables = 1
+net.bridge.bridge-nf-call-iptables = 1
+EOF
+sysctl --system  # 生效
+
+# 修改当前时间为北京时间
+# 查看当前系统时间 
+date
+# 修改当前系统时间 
+date -s "2018-2-22 19:10:30
+# 查看硬件时间 
+hwclock --show
+# 修改硬件时间 
+hwclock --set --date "2018-2-22 19:10:30"
+# 同步系统时间和硬件时间 
+hwclock --hctosys
+# 保存时钟 
+clock -w
+```
+
+上述操作执行完毕后重启
+```
+reboot
 ```
+三台服务器,开始下一步的安装
+
+
+# 2.离线安装Docker及其相应组件(三台虚拟机都需要安装)
+
+## 2.1离线安装Docker
+
+```
+# 1.创建目录存放相应的安装包
+mkdir -p /opt/package/
+
+# 2.上传安装包下的docker文件夹到上述的目录中
+
+# 3.进入目录,进行解压缩操作
+cd /opt/package/docker
 unzip docker19-rpm.zip
+
+# 4.安装docker
 rpm -ivh *.rpm  --force --nodeps
 systemctl enable docker && systemctl start docker
+
+# 5.查看是否安装成功
 docker --version
 ```
+
+
 输出docker版本号表示安装成功
-![image-20211108145729544](../../照片/image-20211108145729544.png)
+![image-20211108145729544](assets/image-20211108145729544.png)
 
-## 1.2离线安装Docker-compose
+## 2.2离线安装Docker-compose
 
 将安装包目录下的docker-compose-linux-x86_64文件上传到虚拟机的```/opt/package```目录下使用命令
 ```
-// 将下载好的文件传入linux系统中,并重命名未docker-compose
+// 1.将下载好的文件传入linux系统中,并重命名未docker-compose
 mv docker-compose-linux-x86_64 docker-compose
-// 给予docker-compose文件可执行权限
+// 2.给予docker-compose文件可执行权限
 chmod u+x docker-compose
-// 将docker-compose文件移至/usr/local/bin
+// 3.将docker-compose文件移至/usr/local/bin
 mv docker-compose /usr/local/bin
-// 查看版本
+// 4.查看版本
 docker-compose --version
 ```
 输出docker-compose版本号表示安装成功
-![image-20211108154405864](../../照片/image-20211108154405864.png)
+![image-20211108154405864](assets/image-20211108154405864.png)
+
+# 3.安装Harbor及相应的配置(只需要一台虚拟机安装)
+
+## 3.1安装Harbor
+1. 将压缩包harbor-offline-installer-v2.3.2.tgz上传到```/opt/package/```目录下
+2. 解压该压缩包
+```
+tar xf harbor-offline-installer-v2.3.2.tgz
+```
+3. 修改harbor安装的配置文件
+
+首先备份一份压缩包
+```
+# cp harbor.yml.tmpl  harbor.yml         //复制配置文件内容到harbor.yml 中(安装时只识别harbor.yml)
+# mkdir -p /opt/application/harbor       //用于存放harbor的持久化数据
+```
+
+其次对harbor.yml文件进行修改配置
+
+```
+#设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost。默认情况下,harbor使用的端口是80,若使用自定义的端口,除了要改docker-compose.yml文件中的配置外,这里的hostname也要加上自定义的端口,否则在docker login、push时会报错
+hostname: 192.168.0.8:9999      
+#http配置
+http: 
+# port for http, default is 80. If https enabled, this port will redirect to https port
+port: 9999                      
+
+# https配置(如不需要可不配置,注释掉)
+# https related config
+# https:
+# https port for harbor, default is 443
+# port: 443
+# The path of cert and key files for nginx
+# certificate: /your/certificate/path
+# private_key: /your/private/key/path
+
+# external_url: https://reg.mydomain.com:8433      
+# 如果要启用外部代理,比如外层的NGINX、LB等,请取消注释external_url,当它启用时,hostname将不再使用。
+# admin密码
+harbor_admin_password: Harbor12345         
+
+
+
+#数据库配置
+database:
+# The password for the root user of Harbor DB. Change this before any production use.
+password: root123
+# The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained.
+max_idle_conns: 50
+# The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections.
+# Note: the default number of connections is 100 for postgres.
+max_open_conns: 100
+
+
+#持久化数据目录
+data_volume: /opt/application/harbor
+
+```
+
+4. 安装并启动Harbor
+
+保证此时在harbor安装文件中,执行install.sh文件进行安装,命令为:``` ./install.sh```
+
+5. 访问harbor Web界面
+
+通过自己的ip+端口访问
+
+![image-20211110154335629](assets/image-20211110154335629.png)
+
+## 3.2配置Docker访问Harbor(三台虚拟机都要配置)
+
+首先修改虚拟机的hosts
+```
+# 将下面的ip缓存harbor的ip
+echo "10.168.59.60  server.harbor.com">> /etc/hosts
+```
+
+docker添加harbor配置-----注意这里要加harbor的端口号,这里配置的端口号为上述harbor配置文件的端口号
+```
+mkdir -p /etc/docker
+
+tee /etc/docker/daemon.json <<-'EOF'
+{
+  "insecure-registries": ["server.harbor.com:80"]
+}
+EOF
+
+systemctl daemon-reload && systemctl restart docker
+```
+
+输入命令```docker login server.harbor.com:80```
+输入用户名:admin
+密码:Harbor12345
+![image-20211110155332792](assets/image-20211110155332792.png)
+至此,harbor配置完成
+
+# 5.安装kubesphere及其相应的插件
+
+## 5.1将离线包上传至harbor仓库(该操作只需在master节点进行)
+
+将安装包目录下的kubesphere文件夹上传至虚拟机master节点的
+```
+/opt/package/
+```
+目录下
+
+进入harbor仓库
+![image-20211110230053303](assets/image-20211110230053303.png)
+新建一个kubesphere项目
+![image-20211111101212415](assets/image-20211111101212415.png)
+
+```
+# 在虚拟机master节点中执行命令
+
+# 进入该路径
+cd /opt/package/kubesphere/
+
+# 上传安装包 这里的最后一行改成自己harbor仓库的ip+端口号+项目名称
+./offline-installation-tool.sh -l images-list.txt -d ./kubesphere-images -r server.harbor.com:80/kubesphere
+# 等待上传完毕
+```
+![image-20211110230429326](assets/image-20211110230429326.png)
+
+## 5.2最小化安装kubesphere
+
+```
+# 执行以下命令
+# 1.编辑cluster-configuration.yaml添加您的私有镜像仓库
+vim cluster-configuration.yaml
+spec:
+  persistence:
+    storageClass: ""        
+  authentication:
+    jwtSecret: ""           
+  local_registry: server.harbor.com:80/kubesphere   #添加内容
+
+# 2.编辑完成后保存 cluster-configuration.yaml,使用以下命令将 ks-installer 替换为您自己仓库的地址---(本文的harbor安装地址server.harbor.com:80/kubesphere)
+sed -i "s#^\s*image: kubesphere.*/ks-installer:.*#        image: server.harbor.com:80/kubesphere/kubesphere/ks-installer:v3.1.1#" kubesphere-installer.yaml
+
+# 3.请按照如下先后顺序安装(必须)
+kubectl apply -f kubesphere-installer.yaml 
+kubectl get pods -A
+```
+![image-20211110231108730](assets/image-20211110231108730-16365570741011.png)
+![image-20211110231233626](assets/image-20211110231233626.png)
+
+```
+# 4.等待ks-installer容器运行完毕,执行
+kubectl apply -f cluster-configuration.yaml
+```
+
+## 5.3检查安装日志
+
+```
+# 检查安装日志等待安装成功
+kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
+```
+如下图所示,则表示安装成功
+![image-20211111101337952](assets/image-20211111101337952.png)
+
+
+## 5.4安装必要的插件
+
+本次需要安装额外的几个插件
+1. KubeSphere日志系统
+2. KubeSphere DevOps
+3. KubeSphere kubeedge
+
+```
+# 1.编辑cluster-configuration.yaml
+vim cluster-configuration.yaml
+
+devops:
+  enabled: true # 将“false”更改为“true”。
+
+kubeedge:          
+  enabled: true # 将“false”更改为“true”。
+
+logging:
+  enabled: true # 将“false”更改为“true”。
+
+# 2.执行以下命令开始安装
+kubectl apply -f cluster-configuration.yaml
+
+# 3.监控安装过程
+kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
+```
+如下图所示,表示安装成功
+![image-20211111102817757](assets/image-20211111102817757.png)
+![image-20211111102801129](assets/image-20211111102801129.png)
+
+# 附录----安装软件的版本
+
+| 软件           | 版本    |
+| -------------- | ------- |
+| centos         | 7.5     |
+| docker         | 19.03.7 |
+| docker-compose | 2.1.0   |
+| Harbor         | 2.3.2   |
+| kubernetes,    | 1.19.0  |
+| kubesphere     | 3.1.1   |
+