| 主机ip | 主机名 | 说明 |
|---|---|---|
| 192.168.100.128 | k8s-master01 | master节点1 |
| 192.168.100.129 | k8s-master02 | master节点2 |
| 192.168.100.130 | k8s-master03 | master节点3 |
| 192.168.100.131 | k8s-node01 | worker节点1 |
| 192.168.100.132 | k8s-node02 | worker节点2 |
| 192.168.100.141 | haproxy01 | ha节点1 |
| 192.168.100.142 | haproxy02 | ha节点2 |
| 192.168.100.140 | ha-vip | vip节点 |
#修改内核参数
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_nonlocal_bind = 1
EOF
#查看内核参数
sysctl -p
#安装配置haproxy
apt update
apt -y install haproxy
# 添加下面行
cat >> /etc/haproxy/haproxy.cfg <<EOF
listen stats
mode http
bind 0.0.0.0:8888
stats enable
log global
stats uri /status
stats auth admin:12345678
listen kubernetes-api-6443
bind 192.168.100.140:6443
mode tcp
server k8s-master01 192.168.100.128:6443 check inter 3s fall 3 rise 3
server k8s-master02 192.168.100.129:6443 check inter 3s fall 3 rise 3
server k8s-master03 192.168.100.130:6443 check inter 3s fall 3 rise 3
EOF
# 重启haproxy
systemctl restart haproxy
安装keepalived实现HAProxy高可用
apt update
apt -y install keepalived
vim /etc/keepalived/keepalived.conf
#内容如下
globla_defs {
router_id ha1 #在haproxy02上为ha2
}
vrrp_script check_haproxy { #指定脚本
script "/etc/keepalived/check_haproxy.sh"
interval 1
weight -30
fall 3
rise 2
timeout 2
}
vrrp_instance VI_1 {
state MASTER #在haproxy02上为BACKUP
interface ens32
garp_master_delay 10
smtp_alert
virtual_router_id 66 #指定虚拟路由器ID,haproxy01和haproxy02此值必须相同
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.100.140/24 dev ens32 label ens32:1 #指定VIP,haproxy01和haproxy02此值必须相同
}
track_script {
check_haproxy #调用上面定义的脚本
}
}
# 编写check_haproxy.sh脚本
cat > /etc/keepalived/check_haproxy.sh <<EOF
#!/bin/bash
/usr/bin/killall -0 haproxy || systemctl restart haproxy
EOF
# 修改权限
chmod a+x /etc/keepalived/check_haproxy.sh
# 重启keepalived
systemctl restart keepalived
配置ssh key 验证,方便后续同步文件
# 生成密钥
ssh-keygen
# 把密钥发送到其它服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.100.129
# 设置主机名
hostnamectl set-hostname k8s-master01
# 修改hosts文件
cat > /etc/hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.140 ha-vip
192.168.100.128 k8s-master01
192.168.100.129 k8s-master02
192.168.100.130 k8s-master03
192.168.100.131 k8s-node01
192.168.100.132 k8s-node02
192.168.100.141 haproxy01
192.168.100.142 haproxy02
EOF
# 同步配置到其它服务器
for i in {129..132};do scp /etc/hosts 192.168.100.$i:/etc/ ;done
for i in {141..142};do scp /etc/hosts 192.168.100.$i:/etc/ ;done
# 临时关闭swap
swapoff -a
# 永久关闭swap
sed -i '/swap/s/^/#/' /etc/fstab
# 借助于chronyd服务设定各节点时间精确同步
apt -y install chrony
# 执行同步
chronyc sources -v
# 禁用默认配置的iptables防火墙服务
ufw diable
ufw status
如果是安装docker会自动配置以下的内核参数,无需手动实现
如果安装containerd,需要手动配置
允许iptables检查桥接流量,若要显式加载此模块,需运行modprobe br_netfilter
为让linux节点的iptables能够正确查看桥接流量,还需要确认net.bridge.bridge-nf-call-iptables设置为1
# 加载模块
modprobe overlay
modprobe br_netfilter
# 开机加载
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 设置所需的sysctl参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用sysctl参数而不重新启动
sysctl --system
在所有节点安装Containerd
#Ubuntu20.04利用内置仓库安装containerd
apt update
apt -y install containerd
# 服务启动
systemctl status containerd
# 利用containerd的客户端工具ctr验证修改是否成功
containerd --version
ctr version
# 修改containerd配置,将sanbox_image镜像源设置为阿里云google_containers镜像源
mkdir /etc/containerd/
# 产生containerd默认配置文件
containerd config default > /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml
# 替换
sed -i "s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
# 镜像加速
vim /etc/containerd/config.toml
# 在此行下面加两行
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry.aliyuncs.com"]
# 配置containerd cgroup驱动程序systemd
# 替换
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
# 查看SystemdCgroup参数
grep SystemdCgroup /etc/containerd/config.toml
# 重启containerd
systemctl restart containerd
Containerd有两种二进制安装包:
解压到根目录 tar xf cri-containerd-cni-版本号-linux-amd64.tar.gz -C /
# 修改containerd的配置,将sandox_image镜像源设置为阿里云google_containers镜像源
mkdir /etc/containerd/
# 产生containerd默认配置文件
containerd config default > /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml
# 替换
sed -i "s#k8s.gcr.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
# 镜像加速
vim /etc/containerd/config.toml
# 在此行下面加两行
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry.aliyuncs.com"]
systemctl daemon-reload
systemctl status containerd
systemctl enable --now containerd
systemctl is-active containerd
解决CNI问题
# 下载链接https://github.com/containernetworking/plugins/releases
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
# 覆盖原有文件
tar xf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin
通过国内镜像站点阿里云安装 的参考链接
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
for i in {128..132};do scp /etc/apt/sources.list.d/kubernetes.list 192.168.100.$i:/etc/apt/sources.list.d/;done
apt-get update
#查看版本
apt-cache madison kubeadm|head
#安装指定版本
apt install -y kubeadm=1.25.0-00 kubelet=1.25.0-00 kubectl=1.25.0-00
#安装最新版本
apt install -y kubeadm kubelet kubectl
初始化参数说明:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m8cLPun1-1664185593468)(D:\software\学习资料\自编文档\imgs\image-20220921122016588.png)]
初始化集群:
# 命令加参数的方式
kubeadm init --control-plane-endpoint="ha-vip" --kubernetes-version=v1.25.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --image-repository registry.aliyuncs.com/google_containers --upload-certs
kubectl是kube-apiserver的命令行客户端程序,实现了除系统部署之外的几乎全部的管理操作,是kubernetes管理员使用最多的命令之一。kubectl需经由API server认证及授权以后才能执行相应的管理操作。kubeadm部署的集群为其生成了一个具有管理员权限的认证配置文件/etc/kubernetes/admin.conf,它可由kubectl通过默认的$home/.kube/config的路径进行加载。用户也可以在kubectl命令上使用–kubeconfig选项指定一个另的位置。
下面复制认证为kubernetes系统管理员的配置文件到目标用户的家目录下:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装bash-completion工具
sudo apt install bash-completion
执行bash_completion
source /usr/share/bash-completion/bash_completion
#在bash shell 中永久的添加自动补全(永久有效,不受切换终端影响)
echo "source <(kubectl completion bash)" >> ~/.bashrc
kubernetes系统中的pod网络的实现依赖于第三方插件进行,简单易用的是为CoreOS担任的flannel项目。但由于国内无法访问,我们使用calico
在初始化的第一个master节点上运行如下命令,向kubernetes部署calico。
# 默认没有网络插件,显示如下状态
kubectl get nodes
curl https://docs.projectcalico.org/manifests/calico.yaml -O
#修改CIDR
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16" #与初始化集群的--pod-network-cidr=10.244.0.0/16一致
# 指定网卡
- name: CLUSTER_TYPE
value: "k8s,bgp"
# 下面添加
- name: IP_AUTODETECTION_METHOD
value: "interface=ens32" # ens32为本地网卡名字
# 安装
kubectl apply -f calico.yaml
# 再次查看状态
kubectl get nodes
kubeadm join ha-vip:6443 --token 值 --discovery-token-ca-cert-hash 值
如:
kubeadm join ha-vip:6443 --token mmujyx.fb3o1p1lsvit6ubr \
--discovery-token-ca-cert-hash sha256:743c18de023175241bbe5ee8a1903d9c0b32bb01755e29462cece4e4d8276d1b
# 其它主节点加入集群
kubeadm join ha-vip:6443 --token 值 --discovery-token-ca-cert-hash 值 --control-plane --certificate-key 值
如:
kubeadm join ha-vip:6443 --token mmujyx.fb3o1p1lsvit6ubr \
--discovery-token-ca-cert-hash sha256:743c18de023175241bbe5ee8a1903d9c0b32bb01755e29462cece4e4d8276d1b \
--control-plane --certificate-key 368be5b6bd9ebc2644406dadf9fe96e08fc095ef502570223f9d3ef1c7fb1da3
ctr是由containerd提供的一个客户端工具。
crictl是CRI兼容的容器运行时命令接口,和containerd无关,由kubernetes提供,可以使用它来检查和调试k8s节点上的容器运行时和应用程序。
| 命令 | docker | ctr | crictl |
|---|---|---|---|
| 查看镜像 | docker images | ctr image ls | crictl images |
| 拉取镜像 | docker pull | ctr image pull | crictl pull |
| 推送镜像 | docker push | ctr image push | 无 |
| 删除镜像 | docker rmi | ctr image rm | crictl rmi |
| 导入镜像 | docker load | ctr image import | 无 |
| 导出镜像 | docker save | ctr image export | 无 |
| 修改镜像标签 | docker tag | ctr image tag | 无 |
| 创建一个新的容器 | docker create | ctr container create | crictl create |
| 运行一个新的容器 | docker run | ctr run | 无 |
| 删除容器 | docker rm | ctr container rm | crictl rm |
| 查看运行容器 | docker ps | ctr task ls / ctr container ls | crictl ps |
| 启动已有容器 | docker start | ctr task start | crictl start |
| 关闭已有容器 | docker stop | ctr task kill | crictl stop |
| 在容器内部执行命令 | docker exec | 无 | crictl exec |
| 查看容器内信息 | docker inspect | ctr container info | crictl inspect |
| 查看容器日志 | docker logs | 无 | crictl logs |
| 查看容器资源 | docker stats | 无 | crictl stats |
nerdctl是与Docker兼容的CLI for Containerd,其支持compose
nerdctl和docker命令行语法类似
nerdctl发布包含两安装版本:
# 在新主机使用nerdctl代替docker
wget https://github.com/containerd/nerdctl/releases/download/v0.23.0/nerdctl-full-0.23.0-linux-amd64.tar.gz
# 查看文件内容
tar tf nerdctl-full-0.23.0-linux-amdj64.tar.gz
# 解压
tar zxvf nerdctl-full-0.23.0-linux-amdj64.tar.gz -C /usr/local
# 启动
systemctl enable --now containerd
# 查看帮助
nerdctl --help
#查看token
kubectl get secret -n kube-system
kubectl get secret -n kube-system bootstrap-token-mmujyx -oyaml
#重新生成token
kubeadm token create --print-join-command
# 请注意,证书密钥可以访问集群敏感数据,请保密!作为保障,上传的证书将在两小时内删除
kubeadm init phase upload-certs --upload-certs
# 创建目录
mkdir ~/metrics
# 下载metrics配置文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 修改文件
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls # 加入参数
image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.1 # 替换成国内镜像
# 应用
kubectl apply -f components.yaml
# 下载安装文件
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
问题:访问不了raw.githubusercontent.com
2、修改hosts
185.199.109.133 raw.githubusercontent.com
# 删除所有的k8s节点
kubectl delete node --all
# 重置kubeadm
kubeadm reset
modprode -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.serive
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
apt uninstall kube*
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da
我试图在Ubuntu14.04中使用Curl安装RVM。我运行了以下命令:\curl-sSLhttps://get.rvm.io|bash-sstable出现如下错误:curl:(7)Failedtoconnecttoget.rvm.ioport80:Networkisunreachable非常感谢解决此问题的任何帮助。谢谢 最佳答案 在执行curl之前尝试这个:echoipv4>>~/.curlrc 关于ruby-在Ubuntu14.04中使用Curl安装RVM时出错,我们在Stack
我正在使用PostgreSQL9.1.3(x86_64-pc-linux-gnu上的PostgreSQL9.1.3,由gcc-4.6.real(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1,64位编译)和在ubuntu11.10上运行3.2.2或3.2.1。现在,我可以使用以下命令连接PostgreSQLsupostgres输入密码我可以看到postgres=#我将以下详细信息放在我的config/database.yml中并执行“railsdb”,它工作正常。开发:adapter:postgresqlencoding:utf8reconnect:falsedat
安装Rails时,一切都很好,但后来,我写道:rails-v和输出:/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`require':cannotloadsuchfile--rails/cli(LoadError)from/home/toshiba/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in`r
提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信
这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi