Go安装 VsCode GoLand Go在线中文API Go依赖包
- 安装Go语言环境
- go build test.go,生成go.exe文件
- 获得执行结果 执行go.exe或者go run test.go
- 批量导入包、全局变量(import("fmt")
- 算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、其它运算符(&取内存地址、*根据根村地址取值)
- 流程控制
count := 100
if count < 30 {
fmt.Println("数量小于20了!")
} else if count >10 && count < 15 {
fmt.Println("数量中间态了!")
} else {
fmt.Println("数量未知态了!")
}
switch count%2 {
case 2 :
fmt.Println("2....")
case 1 :
fmt.Println("1....")
case 0 :
fmt.Println("0....")
default :
fmt.Println("玛德....")
}
// for循环
inc:=10
var sum,tmpInc = sumCount(inc)
fmt.Println("sum:", sum, tmpInc)
type myInt int
type mySumCount sumCount
sC := sumCount
// 支持多返回值,也支持返回值命名
func sumCount (inc int) (a int,b int) {
sum := 0
for tmpInc := 0;tmpInc<inc;tmpInc++ {
fmt.Println("tmpInc:", tmpInc)
sum += tmpInc
}
return sum,inc
sum := 0
for tmpInc := 0;tmpInc<inc;tmpInc++ {
fmt.Println("tmpInc:", tmpInc)
sum += tmpInc
}
a := sum
b := tmpInc
return
}
- 循环语句
- 函数(不支持重载、函数可以赋值给到一个变量、别名)
- 包(package main 与 main函数必须在一起;函数名、变量名大写,可以被其它包访问;同级别源文件包命名必须一致)
- 错误处理(defer、recover();自定义错误值errors.New())
- 数组(var nums [5]int, nums[0] = 1;)
- 切片(slice := make([]int,2,3))
- 映射(tmpCustom := make(map[int]string,10))
- 面向对象
- 依赖管理(go mod tidy; go mod init test; go get url)
- gorm(增删改查持久化,gorm.io/zh_CN/docs/… mysql日志记录(gorm.io/zh_CN/docs/…
- gin(web框架,pkg.go.dev/github.com/…
- goproxy(Go代理,goproxy.cn/)
- viper(读取配置文件,pkg.go.dev/github.com/…
- go 的命令都存放在 $HOME/go/bin下面,swag也是在这个里面,如果执行swag init提示not found,则加上目录前缀来执行,gin-swagger,先把swag引入(pkg.go.dev/github.com/…
- gcc文件下载(sourceforge.net/projects/mi…
- govalidator
- 安装sealos、k8s集群用来管理go需要的环境 a. hostnamectl 设置主机名称 b. 设置局域网Ip地址(时钟服务器) c. 关闭防火墙sestatus ufw d. 安装sealos&启动k8s集群 e. kubectl get nodes f. kuboard云平台管理工具 g. kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
- 打开网络代理的重要性
大概的意思就是无法下载https://proxy.golang.org/github.com/%21burnt%21sushi/toml/@v/v0.3.1.mod包超时了。
二、解决方法
通过网上查找资料,了解可能是需要终端打开代理,因此执行下面两个指令就可以打开:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
- k8s安装
设置防火墙为 Iptables 并设置空规则
【所有节点都执行】
systemctl stop firewalld
systemctl disable firewalld
yum -y install iptables-services ipvsadm;systemctl start iptables;systemctl enable iptables;iptables -F;service iptables save
关闭selinux
【所有节点都执行】
setenforce 0
vi /etc/selinux/config
修改SETLINUX=disabled
配置主机名
【所有节点都执行】
hostnamectl set-hostname 主机名
cat > /etc/hosts <<-'EOF' 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.56.101 k8s-master1 192.168.56.102 k8s-master2 192.168.56.103 k8s-master3 192.168.56.104 k8s-node1 192.168.56.105 k8s-node2 EOF
配置时间同步
【所有节点都执行】
选择一个节点作为服务端,剩下的作为客户端
master1为时间服务器的服务端
其他的为时间服务器的客户端
1)配置k8s-master1
yum install chrony -y
vi /etc/chrony.conf
修改三项
server 127.127.1.0 iburst
allow 192.168.56.0/24
local stratum 10
systemctl start chronyd
systemctl enable chronyd
ss -unl | grep 123
2)配置其它节点
yum install chrony -y
vi /etc/chrony.conf
server 192.168.56.101 iburst
systemctl start chronyd
systemctl enable chronyd
chronyc sources
关闭swap交换分区
【所有节点都执行】
chronyc sources
chronyc -a makestep
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
调整内核参数
【所有节点都执行】
yum -y upgrade systemd
systemctl stop postfix && systemctl disable postfix
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf
忽略报错
设置rsyslogd和systemd journald
【所有节点都执行】
mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘
Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
SystemMaxUse=10G
# 单日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存时间 2 周
MaxRetentionSec=2week
# 不将日志转发到 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald
升级系统内核
【所有节点都执行】
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
grep initrd16 /boot/grub2/grub.cfg
grub2-set-default 0
reboot
kube-proxy开启ipvs的前置条件
【所有节点都执行】
modprobe br_netfilter
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
-------以上步骤完成了k8s系统的基础配置-------
kubernetes安装
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos
wget -c https://sealyun.oss-cn-beijing.aliyuncs.com/05a3db657821277f5f3b92d834bbaf98-v1.22.0/kube1.22.0.tar.gz
上传下载工具
yum install -y lrzsz
选择文件上传
rz -E
tar zxvf sealos.tar.gz
chmod +x sealos && mv sealos /usr/bin
sealos init --passwd '1qazaq1!#' \
--master 192.168.56.102 --master 192.168.56.103 --master 192.168.56.101 \
--node 192.168.56.104 \
--pkg-url /root/kube1.22.0.tar.gz \
--version v1.22.0
kubeadm reset
kubeadm init --cri-socket=unix:///var/run/cri-dockerd.sock --pod-network-cidr=10.244.0.0/16
kubeadm init --pod-network-cidr=192.168.56.0/24 --image-repository=registry.aliyuncs.com/google_containers
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
kubectl taint nodes --all node-role.kubernetes.io/master-
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
-------以上步骤仅供参考命令大概意思,最终能否成功,全凭运气-------
【理论上一次性成功】安装单机版kubernetes
sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 --single
获取节点
kubectl get pods -A
安装docker环境,[参照官网来做吧](https://docs.docker.com/desktop/install/linux-install/),正常执行命令就好
镜像提速,[参照Kuboard官网来做](https://www.kuboard.cn/install/docker-mirror.html#%E4%BF%AE%E6%94%B9%E9%95%9C%E5%83%8F%E4%BB%93%E5%BA%93-mirror-%E5%9C%B0%E5%9D%80)
我们要安装Kuboard,[参照官网哈](https://www.kuboard.cn/install/v3/install-built-in.html#%E9%83%A8%E7%BD%B2%E8%AE%A1%E5%88%92),不是KuboardSpray,这个一定要搞对了~
此时,你就可以访问Kuboard客户端页面了,然后导入Kubernetes集群,这里有个小插曲,因为我是用的云服务商,这里的APIServer地址一直在报错,内容是Kuboard不能连接APIServer,报错如下图,这里APIServer 地址要填写服务器公网IP就解决了;

经历了上面步骤,你的Kuboarad客户端按理就已经正常运行了~从这里开始保证单机版本的Kubernetes可以正常安装应用...
因为是单机部署,这时候的master节点是有污点,不能作为部署节点部署使用的
去污点
kubectl get nodes 发现主节点 k8s-master是notready状态,这块我当时状态是ready,但是因为在安装应用的时候,提示无法安装,这才想到可能是因为单节点master无法作为部署节点使用
查看污点策略
kubectl get no -o yaml | grep taint -A 5
发现master节点都是NoSchedule
去除污点,使主节点能部署pod,下面的命令是去除所有的污点
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
再次查看,如果没有任何输出则污点去除成功
kubectl get no -o yaml | grep taint -A 5
查看pod节点是否成功启动,所有节点都是running
kubectl get pods --all-namespaces
清理集群
sealos clean --all -f
安装NFS文件系统
【全部节点都执行】
yum install nfs-utils rpcbind -y
【Server节点执行】
创建用户nfsupload:nfsupload的user/group用来给NFS client往共享目录写入数据
检查210的user id 和 group id 是否存在
cat /etc/passwd | grep 210
创建nfsupload:nfsupload的User:Group,且user id和group id为210
groupadd -g 210 nfsupload
# -M, --no-create-home 不创建用户目录
useradd -g 210 -u 210 -M nfsupload
创建要共享的目录是根目录,并将该目录的所有者设置为nfsupload:nfsupload
mkdir -p /mnt/data/nfs
chown -R nfsupload:nfsupload /mnt/data/nfs
编辑/etc/exports,添加共享跟目录的共享规则
# 限制只有172.31.240.0/24才可以访问
# rw 有读写权限
# all_squash 所有NFS client的用户名都会被压缩成匿名用户
# anonuid=210,anongid=210 匿名用户的user id和group id为210
/mnt/data/nfs 172.31.240.0/24(rw,all_squash,anonuid=210,anongid=210)
运行`exportfs -r`更新全部共享规则。
运行`exportfs -v` 可以查看共享了哪些目录。
启动NFS server服务:
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
【client节点执行】
检查NFS server的共享规则:
showmount -e 172.31.240.127
挂载NFS server的共享根目录:
mkdir -p /mnt/nfsdata
mount -t nfs 172.31.240.127:/mnt/data/nfs /mnt/nfsdata
运行`df -hk`查看挂载情况
可以运行`umount -l /mnt/nfsdata` 来卸载目录。
【测试NFS】
在NFS client上,测试往共享根目录写入文件
cd /mnt/nfsdata
touch test.txt
在NFS server上,查看文件
cd /mnt/data/nfs
ls -ltra
可以看到文件可以创建成功,且user/group都为`nfsupload`。
【在K8s Pod中使用NFS卷示例】
在NFS server的共享根目录下创建子目录
mkdir -p /mnt/data/nfs/kuard/data
如果共享目录不存在,在创建Pod时挂载会失败,Pod会一直处在ContainerCreating状态。可通过`kubectl describe pods/<pod-name>` 查看详细错误信息。
通过kuboard来创建存储类
设置静态IP(推荐)
虚拟机网卡多选择一块,仅主机Host-Only模式,如果是k8s-master节点,请确保第一块网卡是仅主机模式网卡,具体原因是k8s默认使用第一块网卡作为其它节点扩展交互使用,导致无法连接其它节点
定义IP
vi /etc/sysconfig/network-scripts/ifcfg-ens0s8
//修改以下内容
BOOTPROTO=static //启用静态IP地址
ONBOOT=yes //开启自动启用网络连接
//添加vmnet8的子网掩码和网关,ip要保证在192.168.126.x,还要保证唯一性
IPADDR=192.168.126.124 //设置IP地址
NETMASK=255.255.255.0 //子网掩码
GATEWAY=192.168.126.2 //设置网关
设置DNS地址
vi /etc/resolv.conf //编辑 resolv.conf文件
nameserver 114.114.114.114 //添加DNS地址
重启网络服务
systemctl restart network
测试网络是否连通
ip addr // 查看与自己设置是否一致
ping 公网域名 // 测试网络联通
Centos7镜像下载地址
https://mirrors.bfsu.edu.cn/centos/7.9.2009/isos/x86_64/