首页 > 编程语言 > 详细

python安装k8s1.11.0

时间:2019-02-02 17:22:24      阅读:131      评论:0      收藏:0      [点我收藏+]
一、脚本说明:

本实验中master、node、etcd都是单体。

安装顺序为:先安装test1节点主要组件,然后开始安装test2节点,最后回头把test1节点加入集群中,这样做目的是理解以后扩容都需要进行哪些操作


实验架构:

test1: 192.168.0.91    etcd、kubectl工具、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet组件、cni、kube-proxy

test2: 192.168.0.92    docker、kubectl工具、kubelet组件、cni、kube-proxy、flannel、coredns



1、创建目录

mkdir -p /k8s/profile/

mkdir -p /server/software/k8s/

mkdir -p /root/ssl/

mkdir -p /script/


2、定义环境变量


3、需要的文件提前放到/k8s/profile/目录下

hosts 、 k8s.conf、etcd.service、profile、token.csv、apiserver.address、kube-apiserver.service、config、apiserver

kube-controller-manager.service、controller-manager、kube-scheduler.service、kubelet.service、kubelet、test1-kubelet-config.yml、test2-kubelet-config.yml

kube-proxy.service、test1-proxy、test2-proxy、kube-flannel.yml、coredns.yaml

配置文件下载地址:https://pan.baidu.com/s/1Lyz-xgVaPLyU-MsxWMRROg 
提取码:6un5



4、安装包提前放置到/server/software/k8s/下面,下面是需要放的安装包

etcd-v3.2.18-linux-amd64.tar

cfssl_linux-amd64、cfssl-certinfo_linux-amd64、cfssljson_linux-amd64

kubernetes-server-linux-amd64.tar.gz、cni-plugins-amd64-v0.7.1.tgz、docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm



5、创建证书所需要的文件提前都放到 /root/ssl/目录下,下面是需要放置的文件

ca-config.json  ca-csr.json   etcd-csr.json  admin-csr.json  kube-apiserver-csr.json  kube-controller-manager-csr.json  kube-scheduler-csr.json

kube-proxy-csr.json

证书所需文件下载地址:链接:https://pan.baidu.com/s/1WfnR4tQjnRIq5Pt5Q15ELw 
提取码:ker1 



6、用到的脚本有三个,提前放到/script/目录下

test1_host.py、test2_host.py、k8s.py、node2.py

脚本下载地址:https://pan.baidu.com/s/1VBnLvfIfVVpy5s6msGsgmg 
提取码:hpej 


7、配置免密登录实现 192.168.0.91免密登录192.168.0.92


9、下发脚本给所有节点安装python、pip


10、test1节点安装ansible、配置主机目录实现通信


11、ansible下发test1_host.py脚本配置test1节点主机名、关闭防火墙、关闭selinux、关闭swap


12、ansible下发test2_host.py脚本配置test1节点主机名、关闭防火墙、关闭selinux、关闭swap


13、先对每个函数进行测试,所有函数测试成功后再一次性执行

python k8s.py


二、所有脚本内容如下:

1、k8s.py内容


[root@test1 script]# cat k8s.py 
#!/usr/bin/python
#-*- codinig: UTF-8 -*-
from __future__ import print_function
import os, sys, stat
import shutil
import tarfile
import subprocess

def environment_format():
    subprocess.call(["iptables -P FORWARD ACCEPT"], shell=True)
    if not os.path.isdir(/k8s/profile):
        os.makedirs(/k8s/profile)

    ms=open("/k8s/profile/k8s.conf")
    for line in ms.readlines():
        with open(/etc/sysctl.d/k8s.conf,w+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["sysctl --system"], shell=True)
    subprocess.call(["modprobe ip_vs"], shell=True)
    subprocess.call(["modprobe ip_vs_rr"], shell=True)
    subprocess.call(["modprobe ip_vs_wrr"], shell=True)
    subprocess.call(["modprobe ip_vs_sh"], shell=True)
    subprocess.call(["modprobe nf_conntrack_ipv4"], shell=True)
    subprocess.call(["lsmod | grep ip_vs"], shell=True)


def etcd_install():
    subprocess.call(["useradd etcd"], shell=True)
    if not os.path.isdir(/opt/k8s/bin/):
        os.makedirs(/opt/k8s/bin/)
    os.chdir(/server/software/k8s/)
    shutil.unpack_archive(etcd-v3.2.18-linux-amd64.tar.gz)
    subprocess.call(["mv etcd-v3.2.18-linux-amd64/etcd* /opt/k8s/bin"], shell=True)
    subprocess.call(["chmod +x /opt/k8s/bin/*"], shell=True)
    subprocess.call(["ln -s /opt/k8s/bin/etcd /usr/bin/etcd"], shell=True)
    subprocess.call(["ln -s /opt/k8s/bin/etcdctl /usr/bin/etcdctl"], shell=True)
    subprocess.call(["etcd --version"], shell=True)
    if not os.path.isdir(/oot/ssl/):
        os.makedirs(/oot/ssl/)
    os.chdir(/root/ssl/)
    subprocess.call(["cfssl gencert -initca ca-csr.json | cfssljson -bare ca"], shell=True)
    if not os.path.isdir(/etc/kubernetes/cert/):
        os.makedirs(/etc/kubernetes/cert/)
    shutil.copy(ca.pem,/etc/kubernetes/cert/)
    shutil.copy(ca-key.pem,/etc/kubernetes/cert/)
    os.chmod("ca.pem",stat.S_IXOTH)
    os.chmod("ca-key.pem",stat.S_IXOTH)
    subprocess.call(["cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd"], shell=True)
    if not os.path.isdir(/etc/etcd/cert/):
        os.makedirs(/etc/etcd/cert/)
    shutil.copy(etcd.pem,/etc/etcd/cert/)
    shutil.copy(etcd-key.pem,/etc/etcd/cert/)
    os.chmod("etcd.pem",stat.S_IXOTH)
    os.chmod("etcd-key.pem",stat.S_IXOTH)

    ms=open("/k8s/profile/profile")
    for line in ms.readlines():
        with open(/etc/profile,a+) as mon:
            mon.write(line)
    ms.close()
    subprocess.call(["source /etc/profile"], shell=True)
    subprocess.call(["mkdir -p /data/etcd"], shell=True)

    os.chdir(/etc/systemd/system/)
    if os.path.exists(etcd.service):
        os.remove(etcd.service)

    ms=open("/k8s/profile/etcd.service")
    for line in ms.readlines():
        with open(/etc/systemd/system/etcd.service,a+) as mon:
            mon.write(line)
    ms.close()
    subprocess.call(["systemctl daemon-reload"], shell=True)
    subprocess.call(["systemctl start etcd"], shell=True)
    subprocess.call(["systemctl enable etcd"], shell=True)
    subprocess.call(["etcdctl --ca-file /etc/kubernetes/cert/ca.pem --cert-file /etc/etcd/cert/etcd.pem --key-file /etc/etcd/cert/etcd-key.pem cluster-health"], shell=True)


def distribute_binary():
    os.chdir(/server/software/k8s/)
    shutil.unpack_archive(kubernetes-server-linux-amd64.tar.gz)
    if not os.path.isdir(/usr/local/kubernetes/bin):
        os.makedirs(/usr/local/kubernetes/bin)
    os.chdir(/server/software/k8s/kubernetes/server/bin)
    subprocess.call(["cp kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/kubernetes/bin"], shell=True)
    shutil.copy(kubectl,/usr/local/bin/)
    subprocess.call(["kubectl version"], shell=True)


def generate_certificate():
    os.chdir(/root/ssl/)
    subprocess.call(["cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin"], shell=True)
    subprocess.call(["cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-apiserver-csr.json | cfssljson -bare kube-apiserver"], shell=True)
    subprocess.call(["cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager"], shell=True)
    subprocess.call(["cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler"], shell=True)
    subprocess.call(["cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy"], shell=True)
    if not os.path.isdir(/etc/kubernetes/pki):
        os.makedirs(/etc/kubernetes/pki)
    if not os.path.isdir(/etc/kubernetes/pki/etcd/):
        os.makedirs(/etc/kubernetes/pki/etcd/)
    subprocess.call(["cp ca*.pem admin*.pem kube-proxy*.pem kube-scheduler*.pem kube-controller-manager*.pem kube-apiserver*.pem /etc/kubernetes/pki"], shell=True)


def create_kubeconfig():
    #生产token变量
    output=subprocess.check_output(["head -c 16 /dev/urandom | od -An -t x | tr -d ‘ ‘"], shell=True)
    token=str(output.decode(utf8).strip()).strip(b)
    #把token.py模板文件中的TOKEN换成真实的token
    os.chdir(/etc/kubernetes/)
    if os.path.exists(token.csv):
        os.remove(token.csv)
    f = open(/k8s/profile/token.py,r,encoding=utf-8)
    f_new = open(/etc/kubernetes/token.csv,w,encoding=utf-8)
    for line in f:
        if "TOKEN" in line:
            line = line.replace(TOKEN,token)
        f_new.write(line)
    f.close()
    f_new.close()

    os.chdir(/etc/kubernetes/)
    ms=open("/k8s/profile/apiserver.address")
    for line in ms.readlines():
        with open(/etc/profile,a+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["source /etc/profile"], shell=True)
    #生产kubelet-bootstrap.py文件
    subprocess.call(["kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kubelet-bootstrap.py"], shell=True)
    subprocess.call(["kubectl config set-credentials kubelet-bootstrap --token=TOKEN --kubeconfig=kubelet-bootstrap.py"], shell=True)
    subprocess.call(["kubectl config set-context default --cluster=kubernetes --user=kubelet-bootstrap --kubeconfig=kubelet-bootstrap.py"], shell=True)

    #把kubelet-bootstrap.py文件中的TOKEN换成真实的token
    f = open(/etc/kubernetes/kubelet-bootstrap.py,r,encoding=utf-8)
    f_new = open(/etc/kubernetes/kubelet-bootstrap.conf,w,encoding=utf-8)
    for line in f:
        if "TOKEN" in line:
            line = line.replace(TOKEN,token)
        f_new.write(line)
    f.close()
    f_new.close()
    subprocess.call(["kubectl config use-context default --kubeconfig=kubelet-bootstrap.conf"], shell=True)

    subprocess.call(["kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=admin.conf"], shell=True)
    subprocess.call(["kubectl config set-credentials admin --client-certificate=/etc/kubernetes/pki/admin.pem --client-key=/etc/kubernetes/pki/admin-key.pem --embed-certs=true --kubeconfig=admin.conf"], shell=True)
    subprocess.call(["kubectl config set-context default --cluster=kubernetes --user=admin --kubeconfig=admin.conf"], shell=True)
    subprocess.call(["kubectl config use-context default --kubeconfig=admin.conf"], shell=True)
    subprocess.call(["kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kube-controller-manager.conf"], shell=True)
    subprocess.call(["kubectl config set-credentials kube-controller-manager --client-certificate=/etc/kubernetes/pki/kube-controller-manager.pem --client-key=/etc/kubernetes/pki/kube-controller-manager-key.pem --embed-certs=true --kubeconfig=kube-controller-manager.conf"], shell=True)
    subprocess.call(["kubectl config set-context default --cluster=kubernetes --user=kube-controller-manager --kubeconfig=kube-controller-manager.conf"], shell=True)
    subprocess.call(["kubectl config use-context default --kubeconfig=kube-controller-manager.conf"], shell=True)
    subprocess.call(["kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kube-scheduler.conf"], shell=True)
    subprocess.call(["kubectl config set-credentials kube-scheduler --client-certificate=/etc/kubernetes/pki/kube-scheduler.pem --client-key=/etc/kubernetes/pki/kube-scheduler-key.pem --embed-certs=true --kubeconfig=kube-scheduler.conf"], shell=True)
    subprocess.call(["kubectl config set-context default --cluster=kubernetes --user=kube-scheduler --kubeconfig=kube-scheduler.conf"], shell=True)
    subprocess.call(["kubectl config use-context default --kubeconfig=kube-scheduler.conf"], shell=True)
    subprocess.call(["kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/pki/ca.pem --embed-certs=true --server=${KUBE_APISERVER} --kubeconfig=kube-proxy.conf"], shell=True)
    subprocess.call(["kubectl config set-credentials kube-proxy --client-certificate=/etc/kubernetes/pki/kube-proxy.pem --client-key=/etc/kubernetes/pki/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.conf"], shell=True)
    subprocess.call(["kubectl config set-context default --cluster=kubernetes --user=kube-proxy --kubeconfig=kube-proxy.conf"], shell=True)
    subprocess.call(["kubectl config use-context default --kubeconfig=kube-proxy.conf"], shell=True)


def configuration_startup_apiserver():
    os.chdir(/root/ssl/)
    subprocess.call(["cp etcd.pem ca-key.pem ca.pem /etc/kubernetes/pki/etcd"], shell=True)
    os.chdir(/etc/kubernetes/pki/)
    subprocess.call(["openssl genrsa -out /etc/kubernetes/pki/sa.key 2048"], shell=True)
    subprocess.call(["openssl rsa -in /etc/kubernetes/pki/sa.key -pubout -out /etc/kubernetes/pki/sa.pub"], shell=True)
    subprocess.call(["ls /etc/kubernetes/pki/sa.*"], shell=True)

    os.chdir(/etc/systemd/system/)
    if os.path.exists(kube-apiserver.service):
        os.remove(kube-apiserver.service)

    ms=open("/k8s/profile/kube-apiserver.service")
    for line in ms.readlines():
        with open(/etc/systemd/system/kube-apiserver.service,a+) as mon:
            mon.write(line)
    ms.close()

    os.chdir(/etc/kubernetes/)
    if os.path.exists(config):
        os.remove(config)

    ms=open("/k8s/profile/config")
    for line in ms.readlines():
        with open(/etc/kubernetes/config,a+) as mon:
            mon.write(line)
    ms.close()

    os.chdir(/etc/kubernetes/)
    if os.path.exists(apiserver):
        os.remove(apiserver)

    ms=open("/k8s/profile/apiserver")
    for line in ms.readlines():
        with open(/etc/kubernetes/apiserver,a+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["systemctl daemon-reload"], shell=True)
    subprocess.call(["systemctl start kube-apiserver"], shell=True)
    subprocess.call(["systemctl enable kube-apiserver"], shell=True)
    subprocess.call(["systemctl status kube-apiserver"], shell=True)


def configuration_startup_controller_manager():

    os.chdir(/etc/systemd/system/)
    if os.path.exists(kube-controller-manager.service):
        os.remove(kube-controller-manager.service)

    ms=open("/k8s/profile/kube-controller-manager.service")
    for line in ms.readlines():
        with open(/etc/systemd/system/kube-controller-manager.service,a+) as mon:
            mon.write(line)
    ms.close()

    ms=open("/k8s/profile/controller-manager")
    for line in ms.readlines():
        with open(/etc/kubernetes/controller-manager,a+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["systemctl daemon-reload"], shell=True)
    subprocess.call(["systemctl start kube-controller-manager"], shell=True)
    subprocess.call(["systemctl enable kube-controller-manager"], shell=True)
    subprocess.call(["systemctl status kube-controller-manager"], shell=True)

def configuration_startup_scheduler():

    os.chdir(/etc/systemd/system/)
    if os.path.exists(kube-scheduler.service):
        os.remove(kube-scheduler.service)

    ms=open("/k8s/profile/kube-scheduler.service")
    for line in ms.readlines():
        with open(/etc/systemd/system/kube-scheduler.service,a+) as mon:
            mon.write(line)
    ms.close()

    ms=open("/k8s/profile/scheduler")
    for line in ms.readlines():
        with open(/etc/kubernetes/scheduler,a+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["systemctl daemon-reload"], shell=True)
    subprocess.call(["systemctl start kube-scheduler"], shell=True)
    subprocess.call(["systemctl enable kube-scheduler"], shell=True)
    subprocess.call(["systemctl status kube-scheduler"], shell=True)

#给kubelet-bootstrap用户授权
    subprocess.call(["kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap"], shell=True)
#查看组件状态
    subprocess.call(["kubectl get componentstatuses"], shell=True)

def copyfile_to_node2():
    subprocess.call(["scp /script/node2.py root@192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /server/software/k8s/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /server/software/k8s/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /k8s/profile/k8s.conf 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /server/software/k8s/kubernetes/server/bin/kubelet 192.168.0.92:/root/"], shell=True)
    subprocess.call(["scp /server/software/k8s/kubernetes/server/bin/kubectl 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /etc/kubernetes/admin.conf 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /etc/kubernetes/kubelet-bootstrap.conf 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /server/software/k8s/cni-plugins-amd64-v0.7.1.tgz 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /k8s/profile/kubelet.service 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /k8s/profile/config 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /k8s/profile/kubelet 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp $HOME/ssl/ca.pem 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /k8s/profile/test2-kubelet-config.yml 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /server/software/k8s/kubernetes/server/bin/kube-proxy 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /etc/kubernetes/kube-proxy.conf 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /k8s/profile/kube-proxy.service 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /k8s/profile/test2-proxy 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /k8s/profile/kube-flannel.yml 192.168.0.92:/home/"], shell=True)
    subprocess.call(["scp /k8s/profile/coredns.yaml 192.168.0.92:/home/"], shell=True)



# 单独安装node2节点,安装node2节点有单独的脚本,需要拷贝到node2节点执行

def install_node2():
    #调用ansible执行脚本
    subprocess.call(["time ansible test2 -m shell -a ‘chdir=/home python node2.py‘"], shell=True)

def test1_join_cluster():
    #禁用selinux
    subprocess.call(["sed -i ‘s/enforcing/disabled/g‘ /etc/selinux/config"], shell=True)
    subprocess.call(["sed -i ‘s/SELINUX=permissive/SELINUX=disabled/‘ /etc/sysconfig/selinux"], shell=True)
    #关闭swap,否则csr通过后kubelet马上就会挂掉
    subprocess.call(["sed -i ‘s/\/dev\/mapper\/centos-swap/#\/dev\/mapper\/centos-swap/g‘ /etc/fstab"], shell=True)
    subprocess.call(["swapoff -a"], shell=True)

    #安装docker
    os.chdir(/server/software/k8s)
    subprocess.call(["yum install -y docker-ce-*.rpm"], shell=True)
    subprocess.call(["systemctl start docker"], shell=True)
    subprocess.call(["systemctl enable docker"], shell=True)
    if not os.path.isdir(/usr/local/kubernetes/bin):
        os.makedirs(/usr/local/kubernetes/bin)
    shutil.copy(/server/software/k8s/kubernetes/server/bin/kubelet,/usr/local/kubernetes/bin/)
    subprocess.call(["rm -rf $HOME/.kube"], shell=True)
    subprocess.call(["mkdir -p $HOME/.kube"], shell=True)
    subprocess.call(["cp /etc/kubernetes/admin.conf $HOME/.kube/config"], shell=True)
    subprocess.call(["chown $(id -u):$(id -g) $HOME/.kube/config"], shell=True)

def install_kubelet_and_cni():
    #安装cni
    subprocess.call(["mkdir -p /opt/cni/bin/"], shell=True)
    subprocess.call(["mkdir -p /etc/cni/net.d/"], shell=True)
    shutil.unpack_archive(/server/software/k8s/cni-plugins-amd64-v0.7.1.tgz,/opt/cni/bin/)
    #安装kubelet
    if not os.path.isdir(/data/kubelet):
        os.makedirs(/data/kubelet)

    os.chdir(/etc/systemd/system/)
    if os.path.exists(kubelet.service):
        os.remove(kubelet.service)

    ms=open("/k8s/profile/kubelet.service")
    for line in ms.readlines():
        with open(/etc/systemd/system/kubelet.service,a+) as mon:
            mon.write(line)
    ms.close()

    os.chdir(/etc/kubernetes/)
    if os.path.exists(kubelet):
        os.remove(kubelet)

    ms=open("/k8s/profile/kubelet")
    for line in ms.readlines():
        with open(/etc/kubernetes/kubelet,a+) as mon:
            mon.write(line)
    ms.close()

    ms=open("/k8s/profile/test1-kubelet-config.yml")
    for line in ms.readlines():
        with open(/etc/kubernetes/kubelet-config.yml,a+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["systemctl daemon-reload"], shell=True)
    subprocess.call(["systemctl enable kubelet"], shell=True)
    subprocess.call(["systemctl start kubelet"], shell=True)
    subprocess.call(["systemctl status kubelet"], shell=True)

def request_via_csr():
    output=subprocess.check_output(["kubectl get csr | grep Pending | awk ‘{print $1}‘"], shell=True)
    name=output.decode(utf8).strip()
    subprocess.call([kubectl,certificate,approve,name])
    #停顿30秒,因为刚通过csr请求等一会才会出现node。否则下一步就会报错
    subprocess.call(["sleep 30"], shell=True)
    subprocess.call(["kubectl get nodes"], shell=True)
    #设置集群角色
    test1=subprocess.check_output(["kubectl get nodes | grep test1 | awk ‘{print $1}‘"], shell=True)
    test1=test1.decode(utf8).strip()
    subprocess.call([kubectl,label,nodes,test1,node-role.kubernetes.io/master=])
    subprocess.call([kubectl,taint,nodes,test1,node-role.kubernetes.io/master=true:NoSchedule])
    subprocess.call(["kubectl get nodes"], shell=True)

def install_kube_proxy():
    if not os.path.isdir(/usr/local/kubernetes/bin):
        os.makedirs(/usr/local/kubernetes/bin)
    shutil.copy(/server/software/k8s/kubernetes/server/bin/kube-proxy,/usr/local/kubernetes/bin/)
    subprocess.call(["yum install -y conntrack-tools"], shell=True)
    shutil.copy(/etc/kubernetes/kube-proxy.conf,/etc/kubernetes/)

    os.chdir(/etc/systemd/system/)
    if os.path.exists(kube-proxy.service):
        os.remove(kube-proxy.service)

    ms=open("/k8s/profile/kube-proxy.service")
    for line in ms.readlines():
        with open(/etc/systemd/system/kube-proxy.service,a+) as mon:
            mon.write(line)
    ms.close()

    ms=open("/home/test1-proxy")
    for line in ms.readlines():
        with open(/etc/kubernetes/proxy,a+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["systemctl daemon-reload"], shell=True)
    subprocess.call(["systemctl enable kube-proxy"], shell=True)
    subprocess.call(["systemctl start kube-proxy"], shell=True)
    subprocess.call(["systemctl status kube-proxy"], shell=True)

def func_list():
    #environment_format()
    #etcd_install()
    #distribute_binary()
    #generate_certificate()
    #create_kubeconfig()
    #configuration_startup_apiserver()
    #configuration_startup_controller_manager()
    #configuration_startup_scheduler()
    #copyfile_to_node2()
    #install_node2()
    #test1_join_cluster()
    #install_kubelet_and_cni()
    #request_via_csr()
    #install_kube_proxy()

def main():
    func_list()
if __name__ == __main__:
    main()



2、node2.py内容

[root@test2 home]# cat node2.py 
#!/usr/bin/python
#-*- codinig: UTF-8 -*-
from __future__ import print_function
import os, sys, stat
import shutil
import tarfile
import subprocess

def environment_format():
    #禁用selinux
    subprocess.call(["sed -i ‘s/enforcing/disabled/g‘ /etc/selinux/config"], shell=True)
    subprocess.call(["sed -i ‘s/SELINUX=permissive/SELINUX=disabled/‘ /etc/sysconfig/selinux"], shell=True)
    #关闭swap,否则csr通过后kubelet马上就会挂掉
    subprocess.call(["sed -i ‘s/\/dev\/mapper\/centos-swap/#\/dev\/mapper\/centos-swap/g‘ /etc/fstab"], shell=True)
    subprocess.call(["swapoff -a"], shell=True)

    subprocess.call(["iptables -P FORWARD ACCEPT"], shell=True)

    os.chdir(/etc/sysctl.d/)
    if os.path.exists(k8s.conf):
        os.remove(k8s.conf)

    ms=open("/home/k8s.conf")
    for line in ms.readlines():
        with open(/etc/sysctl.d/k8s.conf,a+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["sysctl --system"], shell=True)
    subprocess.call(["modprobe ip_vs"], shell=True)
    subprocess.call(["modprobe ip_vs_rr"], shell=True)
    subprocess.call(["modprobe ip_vs_wrr"], shell=True)
    subprocess.call(["modprobe ip_vs_sh"], shell=True)
    subprocess.call(["modprobe nf_conntrack_ipv4"], shell=True)
    subprocess.call(["lsmod | grep ip_vs"], shell=True)

def install_docker():
    subprocess.call(["yum remove -y docker-ce docker-ce-selinux container-selinux"], shell=True)
    os.chdir(/home)
    subprocess.call(["yum install -y docker-ce-*.rpm"], shell=True)
    subprocess.call(["systemctl start docker"], shell=True)
    subprocess.call(["systemctl enable docker"], shell=True)

def install_kubectl():
    subprocess.call(["mkdir -p /usr/local/kubernetes/bin/"], shell=True)
    shutil.copy(/root/kubelet,/usr/local/kubernetes/bin/)
    shutil.copy(/home/kubectl,/usr/local/bin/)
    subprocess.call(["mkdir -p /etc/kubernetes/"], shell=True)
    shutil.copy(/home/admin.conf,/etc/kubernetes/)
    subprocess.call(["rm -rf $HOME/.kube"], shell=True)
    subprocess.call(["mkdir -p $HOME/.kube"], shell=True)
    subprocess.call(["cp /etc/kubernetes/admin.conf $HOME/.kube/config"], shell=True)
    subprocess.call(["chown $(id -u):$(id -g) $HOME/.kube/config"], shell=True)
    shutil.copy(/home/kubelet-bootstrap.conf,/etc/kubernetes/)

def install_cni():
    subprocess.call(["mkdir -p /opt/cni/bin/"], shell=True)
    subprocess.call(["mkdir -p /etc/cni/net.d/"], shell=True)
    shutil.unpack_archive(/home/cni-plugins-amd64-v0.7.1.tgz,/opt/cni/bin/)

def configuration_startup_kubelet():
    subprocess.call(["mkdir -p /data/kubelet/"], shell=True)

    os.chdir(/etc/systemd/system/)
    if os.path.exists(kubelet.service):
        os.remove(kubelet.service)

    ms=open("/home/kubelet.service")
    for line in ms.readlines():
        with open(/etc/systemd/system/kubelet.service,a+) as mon:
            mon.write(line)
    ms.close()

    os.chdir(/etc/kubernetes/)
    if os.path.exists(config):
        os.remove(config)

    ms=open("/home/config")
    for line in ms.readlines():
        with open(/etc/kubernetes/config,a+) as mon:
            mon.write(line)
    ms.close()

    os.chdir(/etc/kubernetes/)
    if os.path.exists(kubelet):
        os.remove(kubelet)

    ms=open("/home/kubelet")
    for line in ms.readlines():
        with open(/etc/kubernetes/kubelet,a+) as mon:
            mon.write(line)
    ms.close()

    if not os.path.isdir(/etc/kubernetes/pki/):
        os.makedirs(/etc/kubernetes/pki/)
    shutil.copy(/home/ca.pem,/etc/kubernetes/pki/)

    os.chdir(/etc/kubernetes/)
    if os.path.exists(kubelet-config.yml):
        os.remove(kubelet-config.yml)

    ms=open("/home/test2-kubelet-config.yml")
    for line in ms.readlines():
        with open(/etc/kubernetes/kubelet-config.yml,a+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["systemctl daemon-reload"], shell=True)
    subprocess.call(["systemctl enable kubelet"], shell=True)
    subprocess.call(["systemctl start kubelet"], shell=True)
    subprocess.call(["systemctl status kubelet"], shell=True)
    os.listdir(/etc/kubernetes/)

def request_via_csr():
    output=subprocess.check_output(["kubectl get csr | grep csr | awk ‘{print $1}‘"], shell=True)
    name=output.decode(utf8).strip()
    subprocess.call([kubectl,certificate,approve,name])
    #停顿30秒,因为刚通过csr请求等一会才会出现node。否则下一步就会报错
    subprocess.call(["sleep 30"], shell=True)
    subprocess.call(["kubectl get nodes"], shell=True)
    #设置集群角色
    test2=subprocess.check_output(["kubectl get nodes | grep test2 | awk ‘{print $1}‘"], shell=True)
    test2=test2.decode(utf8).strip()
    subprocess.call([kubectl,label,nodes,test2,node-role.kubernetes.io/node=])

def install_kube_proxy():
    shutil.copy(/home/kube-proxy,/usr/local/kubernetes/bin/)
    shutil.copy(/home/kube-proxy.conf,/etc/kubernetes/)
    subprocess.call(["yum install -y conntrack-tools"], shell=True)

    os.chdir(/etc/systemd/system/)
    if os.path.exists(kube-proxy.service):
        os.remove(kube-proxy.service)

    ms=open("/home/kube-proxy.service")
    for line in ms.readlines():
        with open(/etc/systemd/system/kube-proxy.service,a+) as mon:
            mon.write(line)
    ms.close()

    os.chdir(/etc/kubernetes/)
    if os.path.exists(proxy):
        os.remove(proxy)

    ms=open("/home/test2-proxy")
    for line in ms.readlines():
        with open(/etc/kubernetes/proxy,a+) as mon:
            mon.write(line)
    ms.close()

    subprocess.call(["systemctl daemon-reload"], shell=True)
    subprocess.call(["systemctl enable kube-proxy"], shell=True)
    subprocess.call(["systemctl start kube-proxy"], shell=True)
    subprocess.call(["systemctl status kube-proxy"], shell=True)

def install_flannel():
    subprocess.call(["kubectl apply -f /home/kube-flannel.yml"], shell=True)
    subprocess.call(["kubectl get pod -n kube-system"], shell=True) 
    subprocess.call(["sleep 10"], shell=True)
    subprocess.call(["kubectl get nodes"], shell=True)

def install_coredns():
    subprocess.call(["yum install jq -y"], shell=True)
    subprocess.call(["kubectl apply -f /home/coredns.yaml"], shell=True)
    subprocess.call(["sleep 10"], shell=True)
    subprocess.call(["kubectl get pod -n kube-system"], shell=True)


def func_list():
    #environment_format()
    #install_docker()
    #install_kubectl()
    #install_cni()
    #configuration_startup_kubelet()
    #request_via_csr()
    #install_kube_proxy()
    #install_flannel()
    install_coredns()

def main():
    func_list()
if __name__ == __main__:
    main()



3、test1_hostname.py内容

[root@test1 script]# cat test1_hostname.py 
#!/usr/bin/python
#-*- codinig: UTF-8 -*-
from __future__ import print_function
import os
import shutil
import tarfile
import subprocess

def hostname_format():
    subprocess.call(["hostnamectl set-hostname test1"], shell=True)
    #配置hosts解析
    ms=open("/k8s/profile/hosts")
    for line in ms.readlines():
        with open(/etc/hosts,a+) as mon:
            mon.write(line)
    ms.close()
    subprocess.call(["sed -i ‘\hostname=test1‘ /etc/hostname"], shell=True)
    subprocess.call(["sed -i ‘\hostname=test1‘ /etc/sysconfig/network"], shell=True)
    subprocess.call(["sed -i ‘s/enforcing/disabled/g‘ /etc/selinux/config"], shell=True)
    subprocess.call(["sed -i ‘s/SELINUX=permissive/SELINUX=disabled/‘ /etc/sysconfig/selinux"], shell=True)
    subprocess.call(["sed -i ‘s/\/dev\/mapper\/centos-swap/#\/dev\/mapper\/centos-swap/g‘ /etc/fstab"], shell=True)
    subprocess.call(["systemctl stop firewalld && systemctl disable firewalld"], shell=True)
    subprocess.call(["reboot"], shell=True)

def func_list():
    hostname_format()

def main():
    func_list()
if __name__ == __main__:
    main()



4、test2_hostname.py内容

[root@test1 script]# cat test2_hostname.py 
#!/usr/bin/python
#-*- codinig: UTF-8 -*-
from __future__ import print_function
import os
import shutil
import tarfile
import subprocess

def hostname_format():
    subprocess.call(["hostnamectl set-hostname test1"], shell=True)
    #配置hosts解析
    ms=open("/k8s/profile/hosts")
    for line in ms.readlines():
        with open(/etc/hosts,a+) as mon:
            mon.write(line)
    ms.close()
    subprocess.call(["sed -i ‘\hostname=test2‘ /etc/hostname"], shell=True)
    subprocess.call(["sed -i ‘\hostname=test2‘ /etc/sysconfig/network"], shell=True)
    subprocess.call(["sed -i ‘s/enforcing/disabled/g‘ /etc/selinux/config"], shell=True)
    subprocess.call(["sed -i ‘s/SELINUX=permissive/SELINUX=disabled/‘ /etc/sysconfig/selinux"], shell=True)
    subprocess.call(["sed -i ‘s/\/dev\/mapper\/centos-swap/#\/dev\/mapper\/centos-swap/g‘ /etc/fstab"], shell=True)
    subprocess.call(["systemctl stop firewalld && systemctl disable firewalld"], shell=True)
    subprocess.call(["reboot"], shell=True)

def func_list():
    hostname_format()

def main():
    func_list()
if __name__ == __main__:
    main()

 

python安装k8s1.11.0

原文:https://www.cnblogs.com/effortsing/p/10348752.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!