|
#!/bin/bash -eux |
|
|
|
K8S_API=$1 |
|
if [ -z "${K8S_API}" ]; then |
|
echo "K8S_API : \"${K8S_API}\" is not exit. Quit..." |
|
exit 0 |
|
fi |
|
|
|
######################## INSTALL K8S FIRST MASTER START ######################## |
|
|
|
cat << EOF > /tmp/init-config.yaml |
|
--- |
|
apiVersion: kubeadm.k8s.io/v1beta2 |
|
kind: ClusterConfiguration |
|
apiServer: {} |
|
clusterName: ring0 |
|
controlPlaneEndpoint: ${K8S_API}:6443 |
|
controllerManager: {} |
|
dns: |
|
type: CoreDNS |
|
etcd: |
|
local: |
|
dataDir: /var/lib/etcd |
|
kubernetesVersion: v1.19.2 |
|
networking: |
|
dnsDomain: cluster.local |
|
podSubnet: 192.168.0.0/18 |
|
serviceSubnet: 10.96.0.0/12 |
|
scheduler: {} |
|
|
|
--- |
|
apiVersion: kubeadm.k8s.io/v1beta2 |
|
kind: InitConfiguration |
|
localAPIEndpoint: |
|
advertiseAddress: "" |
|
bindPort: 0 |
|
nodeRegistration: |
|
name: $(hostname -s) |
|
kubeletExtraArgs: |
|
node-ip: "${INTERNALIP}" |
|
EOF |
|
kubeadm init --config /tmp/init-config.yaml |
|
|
|
# cloud init 에서는 HOME 변수가 없어서 / 를 home으로 동작 할 수 있다. |
|
export HOME=/root |
|
mkdir -p $HOME/.kube |
|
cp /etc/kubernetes/admin.conf $HOME/.kube/config |
|
|
|
kubectl taint nodes "$(hostname -s)" node-role.kubernetes.io/master- |
|
|
|
######################## INSTALL K8S FIRST MASTER END ######################## |
|
|
|
######################## INSTALL CNI START ######################## |
|
|
|
curl -Ls -o /tmp/helm-v3.2.1-linux-amd64.tar.gz https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz |
|
cd /tmp && tar zxvf /tmp/helm-v3.2.1-linux-amd64.tar.gz && cd - |
|
mv /tmp/linux-amd64/helm /tmp/helm |
|
|
|
# install cilium |
|
/tmp/helm repo add cilium https://helm.cilium.io/ |
|
/tmp/helm repo update |
|
|
|
cd /tmp && /tmp/helm pull cilium/cilium --untar |
|
|
|
/tmp/helm install cilium /tmp/cilium --version 1.7.4 \ |
|
--namespace kube-system |
|
|
|
kubectl wait --for=condition=Available --timeout=300s -n kube-system deployment cilium-operator |
|
kubectl wait --for=condition=Available --timeout=300s -n kube-system deployment coredns |
|
|
|
######################## INSTALL CNI END ######################## |
|
|
|
######################## SERVING CERTS FOR OTHER MASTER START ######################## |
|
|
|
# send to other master, nodes |
|
mkdir -p /tmp/metadata |
|
cd /tmp/metadata |
|
|
|
CAHASH=$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //') |
|
TOKEN=$(kubeadm token list | awk '/authentication/{print $1}') |
|
|
|
cp /etc/kubernetes/admin.conf admin.conf |
|
cp /etc/kubernetes/pki/etcd/ca.crt etcd-ca.crt |
|
cp /etc/kubernetes/pki/etcd/ca.key etcd-ca.key |
|
cp /etc/kubernetes/pki/ca.crt ca.crt |
|
cp /etc/kubernetes/pki/ca.key ca.key |
|
cp /etc/kubernetes/pki/front-proxy-ca.crt front-proxy-ca.crt |
|
cp /etc/kubernetes/pki/front-proxy-ca.key front-proxy-ca.key |
|
cp /etc/kubernetes/pki/sa.key sa.key |
|
cp /etc/kubernetes/pki/sa.pub sa.pub |
|
|
|
echo "${K8S_API} ${CAHASH} ${TOKEN}" > k8s |
|
|
|
nohup python3 -m http.server 8880 & |
|
|
|
######################## SERVING CERTS FOR OTHER MASTER END ######################## |