安装wsl2
wsl --install
# wsl --install -d <DistroName> 指定发行版本
固定IP地址
在windows下创建一个bat文件
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
wsl -d Ubuntu-20.04 -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0
wsl -d Ubuntu-20.04 -u root ip addr add 192.168.8.2/24 broadcast 192.168.8.255 dev eth0
wsl -d Ubuntu-20.04 -u root ip route add 0.0.0.0/0 via 192.168.8.1 dev eth0
powershell -c "Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress 192.168.8.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.8.0/24;"
exit
进入到wsl内 修改~/.bashrc 添加下面代码到最后
if [ `hostname -I` != 192.168.8.2 ]; then
cmd.exe /c "刚刚创建的bat文件的位置" 1>nul
fi
修改DNS
- 禁止自动生成 /etc/resolv.conf 添加一个文件 /etc/wsl.conf
# wsl.conf
[network]
generateResolvConf = false
- 创建一个 /etc/resolv.conf
nameserver 192.168.8.1
配置system
执行命令
sudo apt-get update && apt install -yqq fontconfig daemonize
创建配置文件 00-wsl2-systemd.sh
位置:/etc/profile.d/
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
if [ -z "$SYSTEMD_PID" ]; then
sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
fi
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi
修改网络映射
# 删除当前所有映射
netsh interface portproxy reset
# 映射windows 192.168.66.157的80端口到WS2的ip的80端口:
netsh interface portproxy add v4tov4 listenaddress=192.168.66.157 listenport=80 connectaddress=192.168.8.2 connectport=80
# 设置Windows的防火墙,允许监听端口的对内连接
netsh advfirewall firewall add rule name="Open Port 80 for WSL2" dir=in action=allow protocol=TCP localport=80
# 显示当前所有映射关系
netsh interface portproxy show all
安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#or 国内源
curl -sSL https://get.daocloud.io/docker | sh
# 查看版本
docker -v #Docker version 20.10.14, build a224086
#启动docker
systemctl start docker
#查看docker状态
systemctl status docker

image.png
安装docker-compose
下载需要docker-compose版本
地址 github.com/docker/compose/releases
# 下载
sudo curl -L https://github.com/docker/compose/releases/download/v2.3.4/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
#创建软连接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose --version # Docker Compose version v2.3.4
安装harbor
官网地址:https://github.com/goharbor/harbor/releases

image.png
这里我们选择在线安装
# 切换目录
cd /usr/local
# 下载文件
wget https://github.com/goharbor/harbor/releases/download/v2.4.2/harbor-online-installer-v2.4.2.tgz
# 解压文件
tar zxvf harbor-online-installer-v2.4.2.tgz

image.png
# 进入解压出来的文件的目录
cd harbor

image.png
# 复制一份配置文件
cp harbor.yml.tmpl harbor.yml
# 编辑配置文件
vi harbor.yml
修改hostname和harbor_admin_password,我这里将hostname改为ip地址

image.png
# 安装前准备工作
./prepare
# 配置/etc/docker/daemon.json
vi /etc/docker/daemon.json
# 内容
{
"registry-mirrors": ["https://0nth4654.mirror.aliyuncs.com","http://ef017c13.m.daocloud.io"],
"insecure-registries": ["192.168.8.2"]
}
# 重启docker
systemctl restart docker
# 安装horbar
./install.sh
安装完成 浏览器打开我们配置好的地址验证

image.png
新建一个项目

image.png
现在我们去拉一个镜像来上传到我们的仓库

image.png
#拉去镜像
docker pull alpine
#打上我们自己的tag
docker tag alpine:latest 192.168.8.2:80/test/alpine:latest
#登录我们自己的仓库
docker login ip:prot
#上传我们的镜像
docker push 192.168.8.2:80/test/alpine:latest
去仓库验证镜像是否上传成功

image.png
安装Jenkins
# 安装jdk
sudo apt install default-jdk
#创建文件夹
mkdir /var/jenkins_home
#修改文件夹权限
chmod 777 /var/jenkins_home
# 创建docker-compse 文件
vim /var/jenkins_home/docker-compose.yml
#内容
version: '3'
services:
jenkins:
image: 'jenkinsci/blueocean'
container_name: jenkins
restart: always
ports:
- '9000:8080'
- '9001:50000'
volumes:
- '/var/jenkins_home:/var/jenkins_home'
# 安装jenkins
cd /var/jenkins_home
docker-compose up -d
# 查看初始密码
cat /var/jenkins_homesecrets/secrets/initialAdminPassword
# 修改源 换成国内的
vi vim hudson.model.UpdateCenter.xml
# 内容 替换成下面的url
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
登录网站 ip:prot
跟随指引安装完毕
k8s 安装
这里我们使用Kind 来创建k8s集群
# 下载安装 kubectl 二进制文件
curl -LO "[https://storage.googleapis.com/kubernetes-release/release/$](https://storage.googleapis.com/kubernetes-release/release/$)(curl -s [https://storage.googleapis.com/kubernetes-release/release/stable.txt](https://storage.googleapis.com/kubernetes-release/release/stable.txt))/bin/linux/amd64/kubectl"
# chmod
chmod +x ./kubectl
mv kubectl /usr/local/bin/
#使用命令kubectl version --client确认是否安装成功。
kubectl version --client
# 下载 KinD 二进制文件
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.8.1/kind-$(uname)-amd64
# 标记为可执行文件
chmod +x ./kind
# 移动到 PATH 目录下去
mv ./kind /usr/local/bin/
# 使用 kind 命令创建一个名为 xxx 的集群
kind create cluster --name xxx
# 检查节点
kubectl get nodes
# 获取所有 namespace 下面的资源对象
kubectl get all --all-namespaces
# 在集群中安装 Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
# 获取 dashboard 的资源对象
kubectl get all -n kubernetes-dashboard
#创建一个临时的代理
kubectl get all -n kubernetes-dashboard
浏览器中我们可以通过如下地址来访问 Dashboard 服务:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
使用官方推荐的 RBAC 方式来创建一个 Token 进行登录,执行如下所示命令:
# 创建一个新的 ServiceAccount
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF
# 将上面的 SA 绑定到系统的 cluster-admin 这个集群角色上
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
#接下来我们可以通过上面创建的 ServiceAccount 来获取 Token 信息:
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
# 拷贝上面命令获取到的 Token 数据