#! /bin/bash
# 在centos7上手动安装k8s1.9.9参考
#https://www.cnblogs.com/peterinblog/p/8124746.html
# 二进制软件下载地址:https://github.com/coreos/etcd/releases
#https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md
# https://github.com/coreos/etcd/releases
# 本次采用master-worker一个主节点和一个工作节点 master:192.168.29.102
#worker:192.168.29.103
# 对于基础环境,比如配置本地yum、关闭防火墙或者开放相关端口、SELINUX这些事先需要准备好。
# master 都是用的root权限,所以没注意权限的问题
# etcd需要采用奇数个节点,因需通过选举产升leader
# 1、下载文件
mkdir /data && cd /data wget https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz # master wget https://dl.k8s.io/v1.9.9/kubernetes-server-linux-amd64.tar.gz #master # wget https://dl.k8s.io/v1.9.9/kubernetes-node-linux-amd64.tar.gz # worker
# 2、解压etcd并移动文件
tar -zxvf etcd-v3.3.9-linux-amd64.tar.gz && etcd-v3.3.9-linux-amd64 mv etcd* /usr/bin
# 3、etcd配置文件
mkdir /etc/etcd cat <<EOF >>/etc/etcd/etcd.conf ETCD_NAME=ansible-k8s2 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_DATA_DIR="/var/lib/etcd/" ETCD_ADVERTISE_CLIENT_URLS="http://192.168.29.102:2379" EOF
# 4、解压k8s文件并移动文件至/usr/bin
tar -zxvf kubernetes-server-linux-amd64.tar.gz && cd kubernetes/server/bin/ mv kube-apiserver kube-controller-manager kube-scheduler kube-proxy kubelet kubectl /usr/bin
# 5、k8s相关配置文件
mkdir /etc/kubernetes && cd /etc/kubernetes # apiserver cat <<EOF >>apiserver # # The following values are used to configure the kube-apiserver # # The address on the local server to listen to. #KUBE_API_ADDRESS="--address=0.0.0.0" KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" # The port on the local server to listen on. KUBE_API_PORT="--port=8080" # Port minions listen on #KUBELET_PORT="--kubelet-port=10250" # Comma separated list of nodes in the etcd cluster KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.29.102:2379" # Address range to use for services KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=192.168.4.0/24" # default admission control policies KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota" # Add your own! KUBE_API_ARGS="" EOF # config cat <<EOF >>config KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=0" KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://192.168.29.102:8080" EOF # controller-manager cat <<EOF >>controller-manager KUBE_CONTROLLER_MANAGER_ARGS="" EOF # scheduler cat <<EOF >>scheduler KUBE_SCHEDULER_ARGS="" EOF
# 6、etcd k8s 启动文件
# etcd cat <<EOF >>/lib/systemd/system/etcd.service [Unit] Description=Etcd Server Documentation=https://github.com/coreos/etcd After=network.target [Service] User=root Type=notify EnvironmentFile=-/etc/etcd/etcd.conf ExecStart=/usr/bin/etcd Restart=on-failure RestartSec=10s LimitNOFILE=40000 [Install] WantedBy=multi-user.target EOF # apiserver cat <<EOF >>/lib/systemd/system/kube-apiserver.service [Unit] Description=Kubernetes API Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.target After=etcd.service Wants=etcd.service [Service] User=root EnvironmentFile=-/etc/kubernetes/config EnvironmentFile=-/etc/kubernetes/apiserver ExecStart=/usr/bin/kube-apiserver \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBE_ETCD_SERVERS \ $KUBE_API_ADDRESS \ $KUBE_API_PORT \ $KUBELET_PORT \ $KUBE_ALLOW_PRIV \ $KUBE_SERVICE_ADDRESSES \ $KUBE_ADMISSION_CONTROL \ $KUBE_API_ARGS Restart=on-failure Type=notify LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF # controller-manager cat <<EOF >>/lib/systemd/system/kube-controller-manager.service [Unit] Description=Kubernetes Controller Manager Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=etcd.service After=kube-apiserver.service Requires=etcd.service Requires=kube-apiserver.service [Service] User=root EnvironmentFile=-/etc/kubernetes/config EnvironmentFile=-/etc/kubernetes/controller-manager ExecStart=/usr/bin/kube-controller-manager \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBE_MASTER \ $KUBE_CONTROLLER_MANAGER_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF # scheduler cat <<EOF >>/lib/systemd/system/kube-scheduler.service [Unit] Description=Kubernetes Scheduler Documentation=https://github.com/kubernetes/kubernetes [Service] User=root EnvironmentFile=-/etc/kubernetes/config EnvironmentFile=-/etc/kubernetes/scheduler ExecStart=/usr/bin/kube-scheduler \ $KUBE_LOGTOSTDERR \ $KUBE_MASTER Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF # 7、开启启动 systemctl daemon-reload for service in etcd.service kube-apiserver.service kube-controller-manager.service kube-scheduler.service; do systemctl enable $service; done
# 8、启动并查看状态
for service in etcd.service kube-apiserver.service kube-controller-manager.service kube-scheduler.service; do systemctl start $service; done for service in etcd.service kube-apiserver.service kube-controller-manager.service kube-scheduler.service; do systemctl status $service; done
# worker
# 1、下载、解压并移动文件
wget wget https://dl.k8s.io/v1.9.9/kubernetes-node-linux-amd64.tar.gz tar -zxvf kubernetes-node-linux-amd64.tar.gz && cd cd kubernetes/node/bin/ mv kube* /usr/bin
# 2、配置文件
# config mkdir -p /etc/kubernetes && cd /etc/kubernetes cat <<EOF >>config KUBE_LOGTOSTDERR="--logtostderr=true" KUBE_LOG_LEVEL="--v=3" KUBE_ALLOW_PRIV="--allow-privileged=false" #KUBE_MASTER="--master=http://192.168.29.102:8080" 版本不支持了 EOF #kubeconfig mkdir /var/lib/kubelet cat <<EOF >>/var/lib/kubelet/kubeconfig apiVersion: v1 kind: Config users: - name: kubelet clusters: - name: kubernetes cluster: server: http://192.168.29.102:8080 contexts: - context: cluster: kubernetes user: kubelet name: service-account-context current-context: service-account-context EOF # kubelet cat <<EOF >>kubelet #KUBELET_ADDRESS="--address=127.0.0.1" KUBELET_HOSTNAME="--hostname-override=192.168.29.103" #KUBELET_API_SERVER="--api-servers=http://192.168.29.102:8080" # pod infrastructure container KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" KUBELET_ARGS="--enable-server=true --enable-debugging-handlers=true --fail-swap-on=false --kubeconfig=/var/lib/kubelet/kubeconfig" EOF # proxy cat <<EOF >>proxy KUBE_PROXY_ARGS="" EOF
# 3、启动文件
cat <<EOF >>/lib/systemd/system/kubelet.service [Unit] Description=Kubernetes Kubelet Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=docker.service # Requires=docker.service # 先安装docker启动了再启动worker [Service] WorkingDirectory=/var/lib/kubelet EnvironmentFile=-/etc/kubernetes/config EnvironmentFile=-/etc/kubernetes/kubelet ExecStart=/usr/bin/kubelet \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBELET_API_SERVER \ $KUBELET_ADDRESS \ $KUBELET_PORT \ $KUBELET_HOSTNAME \ $KUBE_ALLOW_PRIV \ $KUBELET_POD_INFRA_CONTAINER \ $KUBELET_ARGS Restart=on-failure KillMode=process [Install] WantedBy=multi-user.target EOF #proxy cat <<EOF >>/lib/systemd/system/kube-proxy.service [Unit] Description=Kubernetes Proxy Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.target [Service] EnvironmentFile=-/etc/kubernetes/config EnvironmentFile=-/etc/kubernetes/proxy ExecStart=/usr/bin/kube-proxy \ $KUBE_LOGTOSTDERR \ $KUBE_LOG_LEVEL \ $KUBE_MASTER \ $KUBE_PROXY_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target EOF
# 4、安装docker 我是通过rpm安装的 最好通过yum安装,不用管依赖的问题
cd /data/ yum -y install container-selinux libcgroup libltdl.so.7 pigz libtool-ltdl rpm -ivh docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm --nodeps #可能涉及到依赖问题
# 5、开机启动
systemctl daemon-reload for service in docker.service kube-proxy.service kubelet.service; do systemctl enable $service; done
# 6、启动worker
for service in docker.service kube-proxy.service kubelet.service; do systemctl start $service; done # 在master上检查 [root@ansible-k8s2 system]# kubectl get nodes NAME STATUS ROLES AGE VERSION 192.168.29.103 Ready <none> 16h v1.9.9 [root@ansible-k8s2 system]# kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok etcd-0 Healthy {"health":"true"} scheduler Healthy ok
# 注意:如果执行kubectl提示cannot excute binary file 这是下载的文件在解压后出现的问题,我这边是重新解压再移动就可以了
github地址:https://github.com/chances-for-those-who-have-prepared/study/blob/master/k8s/install_k8s_by_manual
如有问题,可在github地址:https://github.com/chances-for-those-who-have-prepared/study/issues说明