范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

云原生k8s一键部署(ansible)

  一、概述
  前面我写了关于k8s环境部署的几篇文章,k8s部署还是比较麻烦的,所以是有必要考虑一键部署的方案,这里借助ansible playbook来实现k8s环境的一键部署,实现快速部署的目的。关于k8s传统部署详细过程可以参考我以下几篇文章: Kubernetes(k8s)安装以及搭建k8s-Dashboard详解
  「云原生」Kubernetes(k8s)最完整版环境部署(V1.24.1)
  关于Ansible的介绍可以参考我以下几篇文章: Ansible 介绍与实战操作演示
  Ansible playbook 讲解与实战操作
  节点信息
  主机名
  IP
  角色
  操作系统
  local-168-182-110
  192.168.182.110
  master,ansible
  centos7
  local-168-182-111
  192.168.182.110
  master
  centos7
  local-168-182-112
  192.168.182.110
  master
  centos7
  local-168-182-113
  192.168.182.110
  node
  centos7
  k8s 架构图:
  基于ansible部署k8s流程图:
  二、Ansible 部署yum -y install epel-release yum -y install ansible ansible --version 1)开启记录日志
  配置文件: /etc/ansible/ansible.cfg  vi /etc/ansible/ansible.cfg   # 去掉前面的"#"号 #log_path = /var/log/ansible.log ==> log_path = /var/log/ansible.log 2)去掉第一次连接ssh ask确认vi /etc/ansible/ansible.cfg   # 其实就是把#去掉 # host_key_checking = False  ==> host_key_checking = False 3)配置hosts
  配置文件: /etc/ansible/hosts  [master1] 192.168.182.110  [master2] 192.168.182.111 192.168.182.112  [node] 192.168.182.113  [k8s:children] master1 master2 node  [k8s:vars] ansible_ssh_user=root ansible_ssh_pass=1331301116 ansible_ssh_port=22 # k8s 版本 k8s_version=1.23.6
  测试连通性 ansible k8s -m ping
  三、开始编排 ansible playbook1)创建目录mkdir -pv ./install-k8s/{init,install-docker,install-k8s,master-init,install-cni,install-ipvs,master-join,node-join,install-ingress-nginx,install-nfs-provisioner,install-harbor,install-metrics-server,uninstall-k8s}/{files,templates,vars,tasks,handlers,meta,default} 2)节点初始化准备 install-k8s/init/files/hosts  文件192.168.182.110 local-168-182-110 192.168.182.111 local-168-182-111 192.168.182.112 local-168-182-112 192.168.182.113 local-168-182-113 准备脚本 install-k8s/init/templates/init.sh  ,内容如下:#!/usr/bin/env bash  ### 【第一步】修改主机名 # 获取主机名 hostnamectl set-hostname $(grep `hostname -i` /tmp/hosts|awk "{print $2}")   ### 【第二步】配置hosts # 先删除 for line in `cat /tmp/hosts` do     sed -i "/$line/d" /etc/hosts done # 追加 cat /tmp/hosts >> /etc/hosts   ### 【第三步】添加互信 # 先创建秘钥对 ssh-keygen -f ~/.ssh/id_rsa -P "" -q  # 安装expect yum -y install expect -y  # 批量推送公钥 for line in `cat /tmp/hosts` do  ip=`echo $line|awk "{print $1}"` password={{ ansible_ssh_pass }}  expect <<-EOF  spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $ip expect {     "(yes/no)?"     {         send "yes "         expect "*assword:" { send "$password "}     }     "*assword:"     {         send "$password "     } }  expect eof EOF done   ### 【第四步】时间同步 yum install chrony -y systemctl start chronyd systemctl enable chronyd chronyc sources   ### 【第五步】关闭防火墙 systemctl stop firewalld systemctl disable firewalld   ### 【第六步】关闭swap # 临时关闭;关闭swap主要是为了性能考虑 swapoff -a # 永久关闭 sed -ri "s/.*swap.*/#&/" /etc/fstab   ### 【第七步】禁用SELinux # 临时关闭 setenforce 0 # 永久禁用 sed -i "s/^SELINUX=enforcing$/SELINUX=disabled/" /etc/selinux/config   ### 【第八步】允许 iptables 检查桥接流量 sudo modprobe br_netfilter lsmod | grep br_netfilter  # 先删 rm -rf /etc/modules-load.d/k8s.conf  cat </etc/docker/daemon.json< /etc/yum.repos.d/kubernetes.repo << EOF [k8s] name=k8s enabled=1 gpgcheck=0 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ EOF  # disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库 yum install -y kubelet-{{ k8s_version }} kubeadm-{{ k8s_version }} kubectl-{{ k8s_version }} --disableexcludes=kubernetes  # 设置为开机自启并现在立刻启动服务 --now:立刻启动服务 systemctl enable --now kubelet  # 查看状态,这里需要等待一段时间再查看服务状态,启动会有点慢 systemctl status kubelet  # 提前下载好 docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v{{ k8s_version }} docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v{{ k8s_version }} docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v{{ k8s_version }} docker pull registry.aliyuncs.com/google_containers/kube-proxy:v{{ k8s_version }} docker pull registry.aliyuncs.com/google_containers/pause:3.6 docker pull registry.aliyuncs.com/google_containers/etcd:3.5.1-0 docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.6 任务编排  install-k8s/install-k8s/tasks/main.yml  - name: install k8s cp   template: src="/a2020/img/data-img.jpg" data-src=install-k8s.sh dest=/tmp/install-k8s.sh - name: install k8s   shell: sh /tmp/install-k8s.sh 5)k8s master节点初始化install-k8s/master-init/templates/master-init.sh  #!/usr/bin/env bash  # 判断是否已经初始化了 kubectl get nodes |grep -q `hostname` 1>&2 >/dev/null if [ $? -eq 0 ];then    exit 0 fi  ip=`hostname -i`  kubeadm init    --apiserver-advertise-address=$ip    --image-repository registry.aliyuncs.com/google_containers    --kubernetes-version v{{ k8s_version }}    --control-plane-endpoint=$ip    --service-cidr=10.1.0.0/16    --pod-network-cidr=10.244.0.0/16    --v=5  mkdir -p $HOME/.kube rm -rf $HOME/.kube/config sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 任务编排  install-k8s/master-init/tasks/main.yml  - name: k8s master init cp   template: src="/a2020/img/data-img.jpg" data-src=master-init.sh dest=/tmp/master-init.sh - name: k8s master init   shell: sh /tmp/master-init.sh 6)安装 CNI(flannel)install-k8s/install-cni/files/install-flannel.sh  #!/usr/bin/env bash  # 去掉master污点 kubectl taint nodes `hostname` node-role.kubernetes.io/master:NoSchedule- 2>/dev/null kubectl taint nodes `hostname` node.kubernetes.io/not-ready:NoSchedule- 2>/dev/null  # For Kubernetes v1.17+ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml  # 查看 kubectl get all -n kube-flannel  # 持续检查 while true do    kubectl get pods -n kube-flannel|grep -q "0/1"    if [ $? -ne 0 ];then       echo "flannel started"       break     else       echo "flannel starting..."     fi     sleep 1 done 任务编排  install-k8s/install-cni/tasks/main.yml  - name: install cni flannel cp   copy: src="/a2020/img/data-img.jpg" data-src=install-flannel.sh dest=/tmp/install-flannel.sh - name: install cni flannel   shell: sh /tmp/install-flannel.sh 7)master 节点加入k8s集群install-k8s/master-join/files/master-join.sh  #!/usr/bin/env bash  # 获取master ip,假设都是第一个节点为master # 证如果过期了,可以使用下面命令生成新证书上传,这里会打印出certificate key,后面会用到 maser_ip=`head -1 /tmp/hosts |awk "{print $1}"`  # 判断节点是否加入 ssh $maser_ip "kubectl get nodes|grep -q `hostname`" if [ $? -eq 0 ];then 	exit 0 fi  CERT_KEY=`ssh $maser_ip "kubeadm init phase upload-certs --upload-certs|tail -1"`  join_str=`ssh $maser_ip kubeadm token create --print-join-command`  $( echo $join_str " --control-plane --certificate-key $CERT_KEY --v=5")  # 拿到上面打印的命令在需要添加的节点上执行  # --control-plane 标志通知 kubeadm join 创建一个新的控制平面。加入master必须加这个标记 # --certificate-key ... 将导致从集群中的 kubeadm-certs Secret 下载控制平面证书并使用给定的密钥进行解密。这里的值就是上面这个命令(kubeadm init phase upload-certs --upload-certs)打印出的key。  mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config  # 去掉master污点 kubectl taint nodes `hostname` node-role.kubernetes.io/master:NoSchedule- 2>/dev/null kubectl taint nodes `hostname` node.kubernetes.io/not-ready:NoSchedule- 2>/dev/null 任务编排  install-k8s/master-join/tasks/main.yml  - name: master join cp   copy: src="/a2020/img/data-img.jpg" data-src=master-join.sh dest=/tmp/master-join.sh - name: master join   shell: sh /tmp/master-join.sh 8)node 节点加入k8s集群install-k8s/node-join/files/node-join.sh  #!/usr/bin/env bash  # 获取master ip,假设都是第一个节点为master maser_ip=`head -1 /tmp/hosts |awk "{print $1}"`  # 判断节点是否加入 ssh $maser_ip "kubectl get nodes|grep -q `hostname`" if [ $? -eq 0 ];then 	exit 0 fi  CERT_KEY=`ssh $maser_ip "kubeadm init phase upload-certs --upload-certs|tail -1"`  join_str=`ssh $maser_ip kubeadm token create --print-join-command`  $( echo $join_str " --certificate-key $CERT_KEY --v=5") 任务编排  install-k8s/node-join/tasks/main.yml  - name: node join cp   copy: src="/a2020/img/data-img.jpg" data-src=node-join.yaml dest=/tmp/node-join.yaml - name: node join   shell: sh /tmp/node-join.yaml 9)安装 ingress-nginxinstall-k8s/install-ingress-nginx/files/ingress-nginx.sh  #!/usr/bin/env bash  # wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml -O /tmp/deploy.yaml  # 可以先把镜像下载,再安装 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.2.0 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1  kubectl apply -f /tmp/deploy.yaml 任务编排  install-k8s/install-ingress-nginx/tasks/main.yml  - name: ingress-nginx deploy cp   copy: src="/a2020/img/data-img.jpg" data-src=deploy.yaml dest=/tmp/deploy.yaml - name: install ingress-nginx cp   copy: src="/a2020/img/data-img.jpg" data-src=ingress-nginx.sh dest=/tmp/ingress-nginx.sh - name: install ingress-nginx   shell: sh /tmp/ingress-nginx.sh 10)安装 nfs 共享存储install-k8s/install-nfs-provisioner/files/nfs-provisioner.sh  #!/usr/bin/env bash  ### 安装helm # 下载包 wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz -O /tmp/helm-v3.7.1-linux-amd64.tar.gz # 解压压缩包 tar -xf /tmp/helm-v3.7.1-linux-amd64.tar.gz -C /root/ # 制作软连接 rm -rf /usr/local/bin/helm ln -s /root/linux-amd64/helm /usr/local/bin/helm  # 判断是否已经部署 helm list -n nfs-provisioner|grep -q nfs-provisioner if [ $? -eq 0 ];then    exit 0 fi  ### 开始安装nfs-provisioner # 添加helm仓库源 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/  #### 安装nfs yum -y install  nfs-utils rpcbind  # 服务端 mkdir -p /opt/nfsdata # 授权共享目录 chmod 666 /opt/nfsdata cat > /etc/exports<
糖尿病患者不能吃元宵?这样吃血糖才平稳!学会4招快乐过元宵一年一度的元宵佳节就要来临,而赏花灯猜灯谜踩高跷,吃元宵等,是各地习俗中的必备项目。口味多样的元宵,可以使人感受舌尖上的美味,品味生活的美好。但对于血糖高的糖友来说,吃元宵是有讲究一定要看看猪油,到底是保护心血管还是伤害心血管?三高这类慢性疾病已经是困扰中老年人的常见病症,一旦患上不仅要通过长期服用药物,在饮食方面也需要格外注意。养生意识较强的人,会在饮食方面格外上心,甚至在油的选择上也会下很大功夫,早年篮网新援号码公布!小库里不在乎杜兰特感受,雷霆发生怪现象哈登和西蒙斯终于完成了交易,这是一笔足以影响东部格局的大交易。众所周知,由于一些号码已经退役或者是有球员在穿,被交易的球员到了新球队后要重新选择号码。据篮网官网公布,西蒙斯将身穿1没有不可战胜,只有敢于战胜的决心,癌症患者3年后获冬奥会金牌霍奇金淋巴瘤是淋巴系统的一种独特的恶性疾病,开始常发生于一组淋巴结,然后扩散到其他淋巴结或结外器官组织。霍奇金淋巴瘤是一种相对罕见的癌症,约占所有癌症的0。5和所有淋巴瘤的15。患林青霞真是不老传说!67岁穿西服套装太显精神,气质完胜同龄人西装,是一种不分性别和年龄的单品,但是看似包容性很强的西装却不好驾驭。纯色的西服套装,一不小心就会穿出严肃呆板的感觉,尤其是黑色西服套装,一不注意就把自己穿成了服务员和保安的即视感个人缴纳住房公积金1250元,公司交1250元,是什么水平?人们在找工作时会综合考虑各方面的问题,除了工资外,公司给予的福利待遇也会成为考量因素之一,而其中社保和住房公积金是不少工作者非常看重的,也就是五险一金。其中的住房公积金不是每一家企王濛评价韩国选手擦领奖台不在一个水平上速度滑冰一人一个道北京时间2月12日,北京冬奥会速度滑冰男子500米决赛,韩国选手车旼奎获得银牌。在赛后颁奖仪式上,车旼奎登台前有一个擦拭领奖台的动作。对此,王濛犀利评价这速滑一人一个道,没跑过人家不求人晚玉鲨鱼谁才是带货达人?火箭少女101粉色或返场和平精英梦幻联动虎牙直播邀请三位主播进行带货挑战。不求人晚玉鲨鱼三大主播首次正面较量,据说这次三人直接pk带货数据,谁将会胜出?各种绝版和稀有皮肤依次上榜,更有大量的豪礼相送。众所国脚赵明剑调侃海参不让吃!让给女足!网友这不是幽默这叫蠢前不久的12强赛,国足13不敌从来没有输过的越南,提前两轮无缘卡塔尔世界杯,让广大球迷憋屈苦闷。赛后,国足队长吴曦在接受采访时谈到了吃海参的事情,从而引来网友口诛笔伐。就在这一事件女足夺亚洲杯靠运气?董方卓赢了就是实力,如果不拼绝杀不了直播吧2月13日讯针对女足夺得亚洲杯是运气好的说法,董方卓给予了驳斥,他认为女足夺冠就是实力的体现。董方卓说足球这个东西就是实力,赢了就是实力。不能说男足每次输球都是运气不好,女足窦靖童下巴纹消失了,戴长款耳坠女人味爆棚,王菲再也不用担心了窦靖童信赖咱们朋友们对她一点都不陌生吧,咱们朋友们都晓得她是王菲的女儿,并且在这个圈子中间也是有着很大的压力,实在许多人都晓得她是王菲的女儿也是窦唯的女儿,连续以来从小就贫乏父爱,
男篮首战告负!但给球迷更大的感动和希望昨天晚上的亚洲杯小组赛,中国队首次出战和老对手韩国队对决,经过四局的艰苦搏杀,最后人员不整,体力不支的中国队败下阵来,收获首败!首战中国队输12分像世预赛与澳大利亚比赛的剧本基本相输给韩国,不是中国男篮的末日宋教昌左手搂抱着突破的孙铭徽,硬是躲过了裁判的吹罚罗健儿顶开范子铭打进,头撞皮球怒目挑衅许勋毫无身体接触的进球,嘴里还在喋喋不休没有中国球迷会喜欢看到这样的场面,亚洲杯小组赛的第一周琦或迎首秀!男篮战巴林无退路剑指大胜胡明轩需为己正名对阵双方中国男篮VS巴林男篮比赛时间7月14日21时北京时间7月14日,2022年FIBA男篮亚洲杯小组赛第二轮,中国男篮将对阵巴林男篮。小组赛首轮赛事,中国男篮8193输给了韩国湖人要求里夫斯休息,却被他拒绝!湖人老板澄清我没有暗示老詹10天前,湖人老板珍妮巴斯在社交平台上发表过一段言论,当时她写道我想念科比。他会理解并解释所有我不被允许做的事。老实说,科比是最伟大的湖人。他对团队的理解胜过自我。也就是说,如果你女排输意大利还是有收获世联赛是练兵场,胜负不重要,关键是发现问题并设法尽快解决问题。艾格鲁和副攻组成的意大利城墙是当今女排最强拦网组合,即使高光在线的朱婷也很难突破,李盈莹受阻很正常,但她的牵制力犹在,孙颖莎王曼玉王艺迪全部晋级八强在刚刚结束的比赛中,王曼昱孙颖莎全部战胜对手,晋级八强。王迪也是战胜对手,晋级八强。因为陈梦退赛,所以我们这次只有三大主力会师吧,不然应该是四大主力,还是有些遗憾的。这三大主力已经消失许久的足坛巨星!与梅西同龄的他已无人问津35岁的前足坛巨星法布雷加斯消失在球迷视野似乎已经有些年头,他上一次入选西班牙国家队还是6年前的事儿,当年的欧洲杯赛也是他最后一次亮相国际大赛。而当时的他也只不过才29岁。如今的法男篮首战告负!但给球迷更大的感动和希望昨天晚上的亚洲杯小组赛,中国队首次出战和老对手韩国队对决,经过四局的艰苦搏杀,最后人员不整,体力不支的中国队败下阵来,收获首败!首战中国队输12分像世预赛与澳大利亚比赛的剧本基本相输给韩国,不是中国男篮的末日宋教昌左手搂抱着突破的孙铭徽,硬是躲过了裁判的吹罚罗健儿顶开范子铭打进,头撞皮球怒目挑衅许勋毫无身体接触的进球,嘴里还在喋喋不休没有中国球迷会喜欢看到这样的场面,亚洲杯小组赛的第一周琦或迎首秀!男篮战巴林无退路剑指大胜胡明轩需为己正名对阵双方中国男篮VS巴林男篮比赛时间7月14日21时北京时间7月14日,2022年FIBA男篮亚洲杯小组赛第二轮,中国男篮将对阵巴林男篮。小组赛首轮赛事,中国男篮8193输给了韩国黄瓜别只知道拍,试试这样下锅炒一炒,营养更美味,方法简单快手黄瓜别只知道拍,试试这样下锅炒一炒,营养更美味,方法简单快手。夏天大家爱吃瓜了,清热解暑人人爱吃,要问我家最常吃的是什么瓜,答案是黄瓜!最最普通常见的蔬菜了,也是水果哦,可是洗洗就