实用指南:【ansible/K8s】K8s的自动化部署源码分享

news/2025/10/25 20:50:47/文章来源:https://www.cnblogs.com/wzzkaifa/p/19165959

环境

三台主机的主机名与ip:

ccka-master 192.168.30.135

ccka-worker1 192.168.30.136

ccka-worker2 192.168.30.137

采用 ​​Ubuntu 作为我们的操作系统

源码

#!/bin/bash
set -ueo pipefail
echo
echo
echo -n Have you done the above? yes or no:
read input
case $input in
yes)echoecho now starting deploy
;;
no)echo please correct it && exit 1
;;
*)echo please input yes or noexit 1
;;
esac
echo
cd /root
#安装ansible
# 更新软件包列表apt update
# 安装软件属性通用包(用于添加PPA)
apt install -y software-properties-common
# 添加 Ansible 官方 PPA 仓库add-apt-repository --yes --update ppa:ansible/ansible
# 安装 Ansibleapt install -y ansible
#配置国内镜像站
cat > /etc/apt/sources.list < /dev/null
apt install sshpass wget bash-completion  -y &> /dev/null
sed -i 's/^#host_key_checking = False/host_key_checking = False/' /etc/ansible/ansible.cfg
#配置互信(多台主机情况下使用后边的脚本)
echo 'Create and copy ssh key to workers'
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N '' &> /dev/null
sshpass -p 1 ssh-copy-id -o StrictHostKeyChecking=no root@ccka-master &> /dev/null
sshpass -p 1 ssh-copy-id -o StrictHostKeyChecking=no root@ccka-worker1 &> /dev/null
sshpass -p 1 ssh-copy-id -o StrictHostKeyChecking=no root@ccka-worker2 &> /dev/null
#配置主机清单
cd /root
cat > /etc/ansible/hosts < /dev/null; thenecho "警告: 无法连接到主机 $host"continuefi# 复制公钥if ssh-copy-id -o "StrictHostKeyChecking=accept-new" "$host"; thenecho "成功配置 $host"elseecho "错误: 无法配置 $host,请手动执行:"echo "  ssh-copy-id $host"fi
done
echo ""
echo "SSH 互信配置完成"
COMMENT
cat > create-k8s.yaml <<'EOF'
---
- name: Configure Kubernetes with Containerdhosts: allbecome: yesremote_user: roottasks:- name: clean apt lockshell: |killall apt apt-getrm -rf /var/lib/apt/lists/lockrm -rf /var/cache/apt/archives/lockrm -rf /var/lib/dpkg/lock*dpkg --configure -a- name: Install required packages for Dockerapt:name:- ca-certificates- curl- gnupg- lsb-releasestate: presentupdate_cache: no  # 先不更新,节省时间- name: Create keyrings directoryfile:path: /etc/apt/keyringsstate: directorymode: '0755'- name: Download Docker GPG keyget_url:url: https://mirrors.nju.edu.cn/docker-ce/linux/ubuntu/gpgdest: /tmp/docker-key.gpgmode: '0644'- name: Process GPG keycommand: gpg --dearmor -o /etc/apt/keyrings/docker.gpg /tmp/docker-key.gpgargs:creates: /etc/apt/keyrings/docker.gpg- name: Add Docker repositoryapt_repository:repo: "deb [arch={{ ansible_architecture }} signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.nju.edu.cn/docker-ce/linux/ubuntu {{ ansible_distribution_release }} stable"state: presentfilename: docker- name: Update apt cache (only for Docker)apt:update_cache: yescache_valid_time: 3600  # 1小时内不需要重新update- name: clean apt lockshell: |killall apt apt-getrm -rf /var/lib/apt/lists/lockrm -rf /var/cache/apt/archives/lockrm -rf /var/lib/dpkg/lock*dpkg --configure -aapt update- name: Deploy chrony for make sure time on all node is sameapt:pkg:- chrony- name: restart chronyd service for timesyncsystemd:state: restarteddaemon_reload: yesname: chronydenabled: yes- name: set timezone to Asia/Shanghaishell: |timedatectl set-timezone Asia/Shanghai- name: Install and configure containerdapt:pkg:- containerdstate: present- name: Configure containerd for Kubernetesshell: |mkdir -p /etc/containerdcontainerd config default | tee /etc/containerd/config.tomlsed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.tomlsed -i 's|sandbox_image = ".*"|sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8"|' /etc/containerd/config.toml- name: restart containerd servicesystemd:state: restarteddaemon_reload: yesname: containerdenabled: yes- name: disable swap on /etc/fstablineinfile:path: /etc/fstabregexp: '.*swap.*'state: absent- name: disable swap runtimeshell: swapoff -a- name: configure iptables modulelineinfile:path: /etc/modules-load.d/k8s.confline: br_netfilterstate: presentcreate: true- name: configure iptables bridgelineinfile:path: /etc/sysctl/k8s.confline: |net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1create: true- name: apply sysctlshell: |modprobe br_netfiltersysctl --system- name: Add Kubernetes GPG keyapt_key:url: https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/Release.keystate: present- name: Add Kubernetes repositoryapt_repository:repo: "deb https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/ /"state: presentfilename: kubernetes- name: Update apt cacheapt:update_cache: yes- name: clean apt lockshell: |killall apt apt-getrm -rf /var/lib/apt/lists/lockrm -rf /var/cache/apt/archives/lockrm -rf /var/lib/dpkg/lock*dpkg --configure -aapt update- name: install kubeadm kubectl kubeletpackage:name:- kubeadm=1.32.0-1.1- kubelet=1.32.0-1.1- kubectl=1.32.0-1.1- sshpassstate: presentallow_downgrades: yes- name: clean apt lockshell: |killall apt apt-getrm -rf /var/lib/apt/lists/lockrm -rf /var/cache/apt/archives/lockrm -rf /var/lib/dpkg/lock*dpkg --configureapt update- name: configure crictl to use containerdshell: crictl config runtime-endpoint unix:///run/containerd/containerd.sock- name: creating kubeadm.yamlshell: kubeadm config print init-defaults > kubeadm.yamlwhen: "'master' in group_names"- name: modify api server addressshell: sed -i '/.*advertiseAddress.*/d' kubeadm.yamlwhen: "'master' in group_names"- name: modify cluster namelineinfile:path: kubeadm.yamlregexp: '.*name.*'line: '  name: ccka-master'state: presentwhen: "'master' in group_names"- name: modify image repositorylineinfile:path: kubeadm.yamlregexp: 'imageRepo.*'line: 'imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers'state: presentwhen: "'master' in group_names"- name: modify crisock to containerdlineinfile:path: kubeadm.yamlregexp: '  criSocket.*'line: '  criSocket: unix:///run/containerd/containerd.sock'state: presentwhen: "'master' in group_names"- name: restart containerd and kubelet servicesystemd:state: restarteddaemon_reload: yesname: "{{ item }}"enabled: yesloop:- containerd- kubelet- name: Deploy kubernetes on Master nodeshell: kubeadm init --config kubeadm.yaml | tee /root/installdetails.logwhen: "'master' in group_names"- name: pause 30s after cluster initshell: sleep 30swhen: "'master' in group_names"- name: Create local kubeconfig directoryfile:path: /root/.kubestate: directorymode: '0700'when: "'master' in group_names"- name: Copy admin config to localcopy:src: /etc/kubernetes/admin.confdest: /root/.kube/configremote_src: yesowner: rootgroup: rootmode: '0600'when: "'master' in group_names"- name: Create .kube directory on workersfile:path: /root/.kubestate: directorymode: '0700'delegate_to: "{{ item }}"loop:- ccka-worker1- ccka-worker2when: "'master' in group_names"- name: Copy admin config to workerscopy:src: /etc/kubernetes/admin.confdest: /root/.kube/configowner: rootgroup: rootmode: '0600'delegate_to: "{{ item }}"loop:- ccka-worker1- ccka-worker2when: "'master' in group_names"- name: Download calico.yamlget_url:url: https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/calico.yamldest: /root/calico.yamlmode: '0644'when: "'master' in group_names"- name: Modify calico.yaml to use domestic image registryreplace:path: /root/calico.yamlregexp: 'docker.io/calico/'replace: 'registry.cn-hangzhou.aliyuncs.com/calico/'when: "'master' in group_names"- name: Deploy Calicoshell: |kubectl apply -f /root/calico.yamlsleep 30when: "'master' in group_names"- name: join workers with containerdshell: |sleep 30join_command=$(sshpass -p 1 ssh -o StrictHostKeyChecking=no root@ccka-master "kubeadm token create --print-join-command")echo "$join_command --cri-socket=unix:///run/containerd/containerd.sock" | bashwhen: "'worker' in group_names"- name: assign worker role label to workersshell: |sleep 30kubectl label nodes ccka-worker2 ccka-worker1 node-role.kubernetes.io/worker=when: "'master' in group_names"
EOF
cp /etc/ansible/ansible.cfg /root/ansible.cfg
if [ $? -ne 0 ];then
echo please review the output on screen and fix error before re-run && exit;
fi
sed -i '/^# command_warnings.*/a\command_warnings = False' /root/ansible.cfg
if [ $? -ne 0 ];then
exit;
fi
echo
echo 'Deploy K8S Cluster now'
ansible-playbook create-k8s.yaml
if [ $? -ne 0 ];then
exit;
fi
#rm -rf create-k8s.yaml /root/ansible.cfg /root/kubeadm.yaml /root/create-k8s-cluster.sh /root/installdetails.log
kubectl completion bash > /etc/bash_completion.d/kubectl
kubeadm completion bash > /etc/bash_completion.d/kubeadm
source /etc/bash_completion.d/kubectl
source /etc/bash_completion.d/kubeadm
echo
echo "Please wait one minute for nodes ready"
echo
sleep 1m
kubectl get pod -A
echo
kubectl get nodes
echo
echo
#!/bin/bash
set -ueo pipefail
echo
echo
echo -n Have you done the above? yes or no:
read input
case $input in
yes)echoecho now starting deploy
;;
no)echo please correct it && exit 1
;;
*)echo please input yes or noexit 1
;;
esac

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/946411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1896F

题目大意: 有一个长度为 \(2n\) 的 \(01\) 序列 \(a\),你可以对他进行一下操作(不超过10步)。 输出一个长度为 \(2n\) 的括号匹配字符串 \(s\),假设每个左括号 \(i\) 与右括号 \(p_{i}\) 匹配,那么将 \(a\) 中 \…

作物遗传育种中的多亲本互交群体(MAGIC)

MAGIC群体简介 植物遗传研究的重要优势是遗传群体构建的便利。传统上用于遗传作图的主要有基于连锁分析的双亲群体和基于关联分析的自然群体和多亲群体。但由于双亲群体的遗传背景狭窄,可定位的 QTL 有限,自然群体存…

联邦大型语言模型、多智能体大型语言模型是什么? - 详解

联邦大型语言模型、多智能体大型语言模型是什么? - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

一个用于自动化基因表达分析的多智能体框架GenoMAS

2025年7月,伊利诺伊大学香槟分校和加州大学圣地亚哥分校的研究团队在预印本平台arXiv发表了题为GenoMAS: A Multi-Agent Framework for Scientific Discovery via Code-Driven Gene Expression Analysis的论文。该研究…

50年的玉米育种改良,是如何应对气候变化的?

分享一篇来自布宜诺斯艾利斯大学今年发表的综述文章《50 years of breeding to improve yield: how maize stands up to climate change》,该文回顾了过去50年玉米育种在提高产量方面的成就,分析了这些改良如何帮助玉…

刷题日记—洛谷数组题单—幻方

幻方如图 题目要求输入n,构建一个nn的幻方,很显然是一个二维数组,但是要怎么插入呢?插入必然要用到循环。是for还是while? 由题目条件可知,幻方的数值是从1——nn,并且第一个数的位置已经确定,而第X个数是由X—…

python爬虫进阶版练习(只说重点,selenium) - 指南

python爬虫进阶版练习(只说重点,selenium) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

基因组选择(GS)如何加速作物遗传增益?

分享一则 来自Violina Bharali 博士课程报告——《Accelerating crop genetic gains with genomic selection》 。基因组选择通过“全基因组预测 + 快速世代 + 高通量数据”三重加速,让作物育种从“马拉松”变成“接力…

AI巨头动态:从OpenAI收购到Meta裁员,我们看到了什么?

最近科技圈真是热闹非凡,OpenAI和Meta这两大AI巨头接连爆出大新闻,让我这个学软件工程的不禁思考:这些事件背后,到底隐藏着哪些技术趋势和职业启示?先说说OpenAI收购SAI这件事。他们居然盯上了macOS供应商,还计划…

Nature Plants | 植物转录因子结合图谱,360个转录因子的近3000个全基因组结合位点图谱

转录因子 (TFs) 是通过结合 DNA 来控制基因表达时空定位的蛋白质。在植物中,数十个 TF 家族与不同的结合位点 (TFBSs) 集合相互作用,这些位点反映了每个 TF 在生物体功能和物种特异性适应中的作用。然而,定义这些作…

【大数据】水质数据可视化分析实用的系统 计算机工程 Hadoop+Spark环境配置 数据科学与大信息技术 附源码+文档+讲解

【大数据】水质数据可视化分析实用的系统 计算机工程 Hadoop+Spark环境配置 数据科学与大信息技术 附源码+文档+讲解2025-10-25 20:34 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; wor…

【MyBatis】MyBatis 报错:Parameter ‘xxx‘ not found - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:3. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--从业务到方案:消费类目智能匹配的整体设计

深入解析:3. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--从业务到方案:消费类目智能匹配的整体设计pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

xyd 2025 S 模拟赛

8 + 100 + 50 + 55 = 213, Rank 15/323.是怎么注意到 \(x^{2^k} \bmod 998244353\) 关于 \(k\) 有循环节的啊喂 /dk2025CSP-S第二轮(复赛)模拟赛 链接:link 题解:link 时间:4h (2025.10.25 14:30~18:30) 题目数:…

标题:AI巨头动态:从OpenAI的野心到Meta的裁员潮

标签:人工智能, 科技新闻, 就业趋势, 行业观察最近关注了一些科技新闻,发现AI领域真是风云变幻,既有像OpenAI这样的公司不断扩张,又有Meta那边传出裁员消息,让人不禁思考这个行业的发展方向。先说说OpenAI吧,他们…

Plant Com | 将基因编辑与组学、人工智能和先进农业技术相结合以提高作物产量

2025年5月28日,英国洛桑研究所(Rothamsted Research) Christophe Lambing团队于Plant Communications 在线发表了题为Integrating genome editing with omics, artificial intelligence and advanced farming techn…

Python 潮流周刊#74:创下吉尼斯世界记录的 Python 编程课

你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。周刊开源在 Github 上,喜欢请给颗小星星支持下~ 🎉 1024程序员节特惠: 10.24 - 10.31 期间,本周刊年费仅需 99 元(原价 148 元)…

10.26保养

OP291前面转角皮带 皮带目前已经有了明显的变形,说明第三方的防静电皮带寿命不佳。 先用库里面G-G25的更换,换下来的先不扔,放我桌上,等美德乐的原装皮带到货再扔。 OP120 气管更换 坦克链太小,气管和电线磨损严重…

作品目录

将在这里更新我的所有作品的目录。 文章 学习笔记暂无游记游记:GESP202406 C++ 三级(待完成) 游记:CSP-J/S2024 第一轮(待完成) 游记:CSP-J/S2024 第二轮(待完成) 游记:GESP202412 C++ 四级(待完成) 游记:…

CCPC2024济南个人题解

A.The Fool / 愚者 题意:给定 \(n\) 行、每行 \(m\) 个连续的字符串,每个字符串长度为 \(k\) ,当中有且仅有一个与其他的字符串不同,找出这个字符串,输出它所在的行和列。 限制条件: \(n,m≤200, k≤10\)。 题解…