现在稳定性差不多了。可以总结一下了。

真正使用时,有几个地方,还是确认一下,再正式运行吧。

#!/bin/bash
# Version V0. ---:

 ;fi

K8S_VERSION="1.14.1"
#定义执行kubeadm的普通用户
General_user="xxx"

K8S_VER=
#当前目录是在cmd下,所以要向上提一级cd..
dir_path=$(cd ``;cd ../;pwd)
cmd_path=$dir_path/cmd
cert_path=$dir_path/cert
rpm_path=$dir_path/rpm

RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
PINK='\E[1;35m'
RES='\E[0m'

#如果存在已有文件,先删除,便于反复部署
function if_file_exist_del() {
   ]; then

  fi
}

env_setting(){
  echo -e "${PINK}***** $FUNCNAME *****${RES}"
  #禁用相关服务
  systemctl stop firewalld.service
  systemctl disable firewalld.service
  setenforce
  sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
  sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux
  sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config
  swapoff -a
  sed -i 's/.*swap.*/#&/' /etc/fstab

  #清空iptables
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT
  iptables -t nat -P PREROUTING ACCEPT
  iptables -t nat -P POSTROUTING ACCEPT
  iptables -t nat -P OUTPUT ACCEPT
  iptables -t mangle -P PREROUTING ACCEPT
  iptables -t mangle -P OUTPUT ACCEPT
  iptables -F
  iptables -t nat -F
  iptables -t mangle -F
  iptables -X
  iptables -t nat -X
  iptables -t mangle -X

  #修改内核参数
  k8s_kernel_conf=/etc/sysctl.d/k8s.conf
  if_file_exist_del $k8s_kernel_conf
  cat<<EOF >$k8s_kernel_conf
net.ipv4.ip_forward =
net.bridge.bridge-nf-call-ip6tables =
net.bridge.bridge-nf-call-iptables =
fs.may_detach_mounts =
vm.overcommit_memory=
vm.panic_on_oom=
fs.inotify.max_user_watches=
fs.
fs.nr_open=
net.netfilter.nf_conntrack_max=
vm.swappiness=
EOF

  sysctl -p
  sysctl --system

  # 安装必须系统软件包并加载模块
  yum install bridge-utils ipset ipvsadm sysstat libseccomp conntrack  conntrack-tools socat -y

  modprobe br_netfilter
  modprobe -- ip_vs
  modprobe -- ipip
  modprobe -- tun
  modprobe -- ip_vs_rr
  modprobe -- ip_vs_wrr
  modprobe -- ip_vs_sh
  modprobe -- nf_conntrack_ipv4
  modprobe -- nf_conntrack_ipv6

  # 自动加载模块
  ipvs_no=$(cat /etc/rc.local|grep ip_vs|wc -l)
   ]; then
      echo "modprobe br_netfilter" >> /etc/rc.local
      echo "modprobe -- ip_vs" >> /etc/rc.local
      echo "modprobe -- ipip" >> /etc/rc.local
      echo "modprobe -- tun" >> /etc/rc.local
      echo "modprobe -- ip_vs_rr" >> /etc/rc.local
      echo "modprobe -- ip_vs_wrr" >> /etc/rc.local
      echo "modprobe -- ip_vs_sh" >> /etc/rc.local
      echo "modprobe -- nf_conntrack_ipv4" >> /etc/rc.local
      echo "modprobe -- nf_conntrack_ipv6" >> /etc/rc.local
  fi  

  # sudo命令,这里不能写变量,所以最佳实现应该是写一个demo用户,接着替换成指定用户。灵活。
  k8s_sudoers_conf=/etc/sudoers.d/k8s_sudoers
  if_file_exist_del $k8s_sudoers_conf
   cat<<EOF >$k8s_sudoers_conf
xxx ALL = (root) NOPASSWD:/bin/systemctl restart docker
xxx ALL = (root) NOPASSWD:/bin/systemctl reload docker
xxx ALL = (root) NOPASSWD:/bin/systemctl daemon-reload
xxx ALL = (root) NOPASSWD:/bin/systemctl start kubelet
xxx ALL = (root) NOPASSWD:/bin/systemctl stop docker
xxx ALL = (root) NOPASSWD:/bin/systemctl start docker
xxx ALL = (root) NOPASSWD:/bin/systemctl status docker
xxx ALL = (root) NOPASSWD:/bin/systemctl stop kubelet
xxx ALL = (root) NOPASSWD:/bin/systemctl restart kubelet
xxx ALL = (root) NOPASSWD:/bin/systemctl status kubelet
xxx ALL = (root) NOPASSWD:/usr/sbin/ipvsadm
xxx ALL = (root) NOPASSWD:/usr/bin/docker
xxx ALL = (root) NOPASSWD:/usr/local/bin/kubeadm
xxx ALL = (root) NOPASSWD:/usr/local/bin/kubectl
xxx ALL = (root) NOPASSWD:/usr/bin/chown -R docker /etc/kubernetes/
EOF
}

init_kube(){
  echo -e "${PINK}***** $FUNCNAME *****${RES}"
    # 先清空所有容器,并去除挂载点
  systemctl stop kubelet.service
  docker ps |grep -v "CONTAINER ID"|awk '{print $1}'|xargs -I {} docker stop {}
  docker ps -a|grep -v "CONTAINER ID"|awk '{print $1}'|xargs -I {} docker rm {}
  systemctl stop docker.service

  for i in $(df|awk '$6 ~ /.*kubelet.*/{print $6}');do
    umount $i
  done

    # 便于反复安装,先清除目录和应用
  rm -rf /etc/cni/
  rm -rf /opt/cni/bin/*
  ifconfig docker0 down
  ip link delete docker0
  rm -f /usr/local/bin/kube*
  rm -f /usr/bin/kube*

  # 如果有calico网络,这样更顺利
  calico_net_conf=/etc/NetworkManager/conf.d/calico.conf
  if_file_exist_del $calico_net_conf
  cat<<EOF >$calico_net_conf
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*
EOF

  # 重新pki,方便证书管理
  pki_dir=/etc/kubernetes
  mkdir -p ${pki_dir}
  rm -rf ${pki_dir}/*
  chown -R ${General_user}.docker ${pki_dir}
  chmod -R 755 ${pki_dir}

    # 删除再重装rpm包
  yum remove kubeadm -y
  yum remove kubectl -y
  yum remove kubelet -y
  yum localinstall $rpm_path/*.rpm -y  --skip-broken
  chown -R $(id -u ${General_user}):$(id -g ${General_user}) /etc/systemd/system/kubelet*
  # 不知为什么,读的是这个目录,要cp一下。
  /bin/cp /usr/bin/kube* /usr/local/bin/

     # 清除可能安装过的网络接口和路由表,干净
  ifconfig -a|grep  -vE '(^[[:space:]]|^$)'|grep -E '(veth|flannel|kube|cni|dummy)'|awk -F ":" '{print $1}'|awk '{for(i=1;i<=NF;i++){print "ip link set " $i " down";}}'|sh
  ifconfig -a|grep  -vE '(^[[:space:]]|^$)'|grep -E '(veth|flannel|kube|cni|dummy)'|awk -F ":" '{print $1}'|awk '{for(i=1;i<=NF;i++){print "ip link delete " $i;}}'|sh
  ip route|grep 10.244|awk '{print $1}'|awk '{for(i=1;i<=NF;i++){print "ip route delete " $i;}}'|sh

  modprobe -r ipip
  modprobe -r ip_gre
  modprobe  ipip

    # 自定义pauce,不然要去google下。
  kubelet_sysconfig=/etc/sysconfig/kubelet
  if_file_exist_del $kubelet_sysconfig
  cat<<EOF >$kubelet_sysconfig
KUBELET_EXTRA_ARGS="--pod-infra-container-image=harbor.xxx.cn/3rd_part/k8s.gcr.io/pause:3.1"
EOF

    # 重新加载,完成。
  systemctl daemon-reload
  systemctl start docker
  systemctl enable kubelet && systemctl restart kubelet

  echo -e "${GREEN_COLOR}***** k8s root init system success ******${RES}"
}

function main(){
  env_setting
  init_kube
  kubeadm reset -f
  ipvsadm -C
}
main

安装k8s,使用root帐号的初始化脚本的更多相关文章

  1. ubuntu初始化root帐号密码

    Ubuntu Kylin 14.04的安装过程中并没有提供设置root密码的过程,取而代之的是自定义的帐号. 如果我们需要使用到root帐号或者root权限,则需要重新设置root帐号的密码. 设置方 ...

  2. ubuntu如何开启root,如何启用Ubuntu中root帐号

    jingyan.baidu.com/article/495ba84116104238b20ede62.html ubuntu如何开启root,如何启用Ubuntu中root帐号 | 浏览:8344 | ...

  3. UBUNTU系统root帐号解锁

    UBUNTU系统启动时默认以安装系统时输入的用户名进行登录.如:以非root帐号rusky登录系统,当我们做某些操作时系统提示需要输入root密码.但我们并没有设置过root密码.此时,可按如下操作为 ...

  4. GitHub学习心得之 安装配置与多帐号管理

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 GitHub学习心得之 安装配置与多帐号管理 1.前言2.GitHub Linux安装(ub ...

  5. 在Ubuntu中用root帐号登录

    一.其实我个人认为这没有多大必要,因为当你需要 root 的权限时,使用 sudo 便可以了.如果你实在需要在 Ubuntu 中启用 root 帐号的话,那么不妨执行下面的操作: 1.重新设置 roo ...

  6. 用root帐号切换其他帐号提示 su: warning: cannot change directory to /home/oracle: Permission denied

    用root帐号切换其他帐号提示: 出错原因: 基本上是根目录或者是/home/oracle目录权限的问题 解决办法: 更改根目录权限为755,并保证对应用户主目录的所属用户和所属组一致和用户名一致. ...

  7. Ubuntu 中启用 root 帐号

    参考:http://linuxtoy.org/archives/howto_enable_ubuntu_root_account.html 如果你实在需要在 Ubuntu 中启用 root 帐号的话, ...

  8. 容器计划任务大坑:在alpine容器里,想用非root帐号执行crontab任务

    我只能说抱歉,我前前后后测试了七天, 将自己预想的配置错误,一个一个去验证. 非root帐号在alpine容器里执行crontab任务,还是失败, 输出依旧是一片空白~ stackoverflow里, ...

  9. 忘记 MySQL 的 root 帐号密码该怎么办

    如果你忘了 MySQL 的 root 帐号密码,别担心,使用下面步骤就可以重设一个新密码: 首先停止 MySQL 服务 “/etc/init.d/mysql stop” 启动 MySQL 服务并屏蔽用 ...

随机推荐

  1. sql 查找所有已经分配部门的员工

    查找所有已经分配部门的员工的last_name和first_nameCREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char( ...

  2. Influx Sql系列教程七:delete 删除数据

    前面介绍了使用insert实现新增和修改记录的使用姿势,接下来我们看一下另外一个简单的使用方式,如何删除数据 1. delete 语句 delete的官方语法如下 DELETE FROM <me ...

  3. Qt信号-槽原理剖析--(2)自己实现信号槽

    时间乃是最大的革新家--培根 先了解一下相关宏: qt为c++增加的相关宏:signals, slots,emit 在qt的预编译过程中,这些宏会被替换. 1)#define signals publ ...

  4. 07 Mybatis的多表查询1----1对多和多对1---@Results注解用法总结

    1.表与表之间的关系及其举例 表之间的关系有4种:一对多.多对一.一对一.多对多. 举例: (1)用户和订单就是一对多 一个用户可以下多个订单 (2)订单和用户就是多对一 多个订单属于同一个用户 (3 ...

  5. day33——进程的创建方式、pid、空间隔离、join方法、其他属性、守护进程

    day33 进程创建的两种方式 在windows环境下,开启进程必须在______name______ == "______main______"下面 p.start(): 只是向 ...

  6. windows 开始→运行→命令集锦

    windows 开始→运行→命令集锦 来源于网络,侵权请通知我删除 命令 说明 vwinver 检查Windows版本 wmimgmt.msc 打开windows管理体系结构(WMI) wupdmgr ...

  7. 关于TI公司DSP工程调用DELAY_US()进入非法中断问题的解决

    最近笔者在调试一个DSP程序时,发现在ad外设初始化时无法正常执行,单步检查,发现当执行到调用 DELAY_US(1000);语句时,就跳入非法. 进一步追查,DELAY_US()是宏定义函数,在笔者 ...

  8. ListModelSerializer模块

    ListModelSerializer模块 一 .自定义反序列化字段 # 一些只参与反序列化的字段,但是不是与数据库关联的 # 在序列化类中规定,并在校验字段时从校验的参数字典中剔除 class Pu ...

  9. golang数组

  10. Python 判断字符串是否包含中文

    一.摘要 使用 xlrd 模块打开带中文的excel文件时,会报错. FileNotFoundError: [Errno 2] No such file or directory: 'xx.xlsx' ...