部署k8s心得

-
2024-07-30

追加

cat <<EOF | tee -a aa.txt
你的内容
EOF

覆盖

cat <<EOF | tee  aa.txt
你的内容
EOF

 

watch kubectl get pods -n calico-system
# 类似tail -f?

ansible使用:

安装(centos7.9)

yum install epel-*
yum install ansible

hosts配置

直接在/etc/ansible/hosts文件中写好主机配置

如果只是ip地址那么可以直接写

[web_all]
10.0.0.1
10.0.0.2

如果是连续的一组ip

[web]
172.16.1.[7:9]

完整的格式:

[web]
web1 ansible_host=10.0.0.2 ansible_port=22 ansible_user=your_user ansible_ssh_pass=your_password
web2 ansible_host=10.0.0.3 ansible_port=22 ansible_user=your_user ansible_ssh_pass=your_password

如果要配置文件中的用户名和密码生效需要修改ansible.cfg配置文件(添加或者更新)

[defaults]
remote_user = your_default_user
host_key_checking = False #开启后可以无视新联主机的验证
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=60s

由于ansible在对远程主机操作之前,默认会先通过setup模块获取机器的facts(静态属性),并且会生成缓存,便于加速远程主机的操作;

但缓存也会导致一些奇怪的现象,比如客户端的机器信息更新了,服务端依旧使用的是旧数据,那就不准确了,因此可以删除缓存。

brm -rf ~/.ansible/cp/*

kubectl阿里源:

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

containerd安装配置

安装

官方:

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install containerdst.io

阿里:

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install containerd.io

containerd命令工具

自带的ctr太垃圾了

# 如果没有安装 containerd,则可以下载 nerdctl-full-<VERSION>-linux-amd64.tar.gz 包进行安装
➜  ~ wget https://github.com/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-amd64.tar.gz
# 如果有限制,也可以替换成下面的 URL 加速下载
# wget https://download.fastgit.org/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-amd64.tar.gz
➜  ~ mkdir -p /usr/local/containerd/bin/ && tar -zxvf nerdctl-0.11.0-linux-amd64.tar.gz nerdctl && mv nerdctl /usr/local/containerd/bin/
➜  ~ ln -s /usr/local/containerd/bin/nerdctl /usr/local/bin/nerdctl
➜  ~ nerdctl version

ansibel初始化环境

ansible k8s -m copy -a 'src=/etc/hosts dest=/etc/hosts'

关闭swap分区

sed -n '/>*swap>*/s/^/#/' /etc/fstab

目录同步:

ansible all -m synchronize -a "src=/path/to/local/yum/repo dest=/path/to/remote/yum/repo" --become
#只传输差异目录,所以效率更高点
ansible all -m copy -a "src=/path/to/local/yum/repo dest=/path/to/remote/yum/repo" --become

设置congtainerd开启自启

ansible k8s -m service -a "name=containerd enabled=yes state=restarted"

安装k8s工具

ansible k8s -m yum -a "name=kubeadm,kubelet,kubectl state=latest" --become
ansible k8s -m service -a "name=kubelet enabled=yes"

配置 kubeadm 及 kubectl 自动补全功能:

yum install -y bash-completion 
kubeadm completion bash > /etc/bash_completion.d/kubeadm
kubectl completion bash > /etc/bash_completion.d/kubectl
source /etc/bash_completion.d/kubeadm /etc/bash_completion.d/kubectl

问题:

  1. containerd的源和k8s的源是什么关系
  2. 二者的cgroup又是什么关系
ansible k8s,10.0.1.10 -m service -a "name=containerd state=restarted" --become
kubeadm config print init-defaults > kubeadm-init.yml
kubeadm config images pull --config=kubeadm-init.yml
kubeadm init --config=kubeadm-init.yml | tee kubeadm-init.log

错误的节点加入移除:

停止调度

kubectl drain <node-name> --delete-local-data --force --ignore-daemonsets --ignore-errors

删除节点:

kubectl delete node <node-name>

目标节点上

sudo kubeadm reset

网络插件:

flannel:

https://github.com/flannel-io/flannel

calico:

https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart

image-20240730132728747

重开

 kubeadm reset

1. 清除 CNI 配置

清除 CNI(容器网络接口)配置文件:

bash
复制代码
sudo rm -rf /etc/cni/net.d

2. 清除 IP 表和 IPVS 表

如果使用了 iptables,可以清除所有规则:

bash复制代码sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -X

如果使用了 IPVS,可以清除 IPVS 表:

bash
复制代码
sudo ipvsadm --clear

3. 删除 kubeconfig 文件

手动删除 kubeconfig 文件,以确保没有遗留的配置:

bash
复制代码
sudo rm -rf $HOME/.kube

4. 清理网络接口

删除由 CNI 插件创建的网络接口,具体命令视具体网络插件而定。例如,删除 cni0 接口:

bash
复制代码
sudo ip link delete cni0

删除 flannel.1 接口(如果使用 Flannel):

bash
复制代码
sudo ip link delete flannel.1

5. 停止并禁用 kubelet 服务

如果还未停止 kubelet,可以手动停止并禁用:

bash复制代码sudo systemctl stop kubelet
sudo systemctl disable kubelet

6. 删除 Kubernetes 相关目录

清除 Kubernetes 相关目录,确保所有配置文件被删除:

bash复制代码sudo rm -rf /etc/kubernetes
sudo rm -rf /var/lib/kubelet
sudo rm -rf /var/lib/etcd
sudo rm -rf /var/log/pods

代理工具

yum install epel* -y
yum install -y proxychains-ng -y

配置文件

[ProxyList]
socks5 47.83.13.28 20415 ZwgVkWf1kz cJeC80VjZz

目录