Kubernetes
DRAFT
========== KUKU BERNADETTE =========
1 | # Gestion certif wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 chmod +x cfssl_linux-amd64 mv cfssl_linux-amd64 /usr/local/bin/cfssl wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 chmod +x cfssljson_linux-amd64 mv cfssljson_linux-amd64 /usr/local/bin/cfssljson mkdir /root/certs ; cd /root/certs echo '{ "signing": { "default": { "expiry": "8760h" }, "profiles": { "kubernetes": { "usages": ["signing", "key encipherment", "server auth", "client auth"], "expiry": "8760h" } } } }' > ca-config.json echo ' { "CN": "jay-cluster", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "FR", "L": "Paris", "O": "JayCorp", "OU": "IT", "ST": "IDF" } ] }' > ca-csr.json cfssl gencert -initca ca-csr.json | cfssljson -bare ca echo '{ "CN": "jay-cluster", "hosts": [ "10.0.45.15", "10.0.45.28", "10.0.45.31", "jeb-test-3740.one.ippon-hosting.net", "jeb-test1-3741.one.ippon-hosting.net", "jeb-test2-3742.one.ippon-hosting.net", "jeb-test-3740", "jeb-test1-3741", "jeb-test2-3742", "localhost", "10.32.0.1", "127.0.1.1", "127.0.0.1" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "FR", "L": "Paris", "O": "JayCorp", "OU": "IT", "ST": "IDF" } ] }' > kubernetes-csr.json cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes scp *pem 10.0.45.28:/root/certs/ scp *pem 10.0.45.31:/root/certs/ # Etcd https://github.com/coreos/etcd/releases/latest/ groupadd etcd useradd etcd -d /var/lib/etcd -s /bin/false -g etcd mkdir -p /var/lib/etcd mkdir -p /etc/etcd/ cp /root/certs/ca.pem /root/certs/kubernetes-key.pem /root/certs/kubernetes.pem /etc/etcd/ chown etcd:etcd /var/lib/etcd -R chown etcd:etcd /etc/etcd -R wget https://github.com/coreos/etcd/releases/download/v3.2.9/etcd-v3.2.9-linux-amd64.tar.gz tar -xvf etcd-v3.2.9-linux-amd64.tar.gz mv etcd-v3.2.9-linux-amd64/etcd* /usr/local/bin/ echo '[Unit] Description=etcd Documentation=https://github.com/coreos [Service] User=etcd ExecStart=/usr/local/bin/etcd --name jeb-test-3740 \ --cert-file=/etc/etcd/kubernetes.pem \ --key-file=/etc/etcd/kubernetes-key.pem \ --peer-cert-file=/etc/etcd/kubernetes.pem \ --peer-key-file=/etc/etcd/kubernetes-key.pem \ --trusted-ca-file=/etc/etcd/ca.pem \ --peer-trusted-ca-file=/etc/etcd/ca.pem \ --initial-advertise-peer-urls https://10.0.45.15:2380 \ --listen-peer-urls https://10.0.45.15:2380 \ --listen-client-urls https://10.0.45.15:2379,http://127.0.0.1:2379 \ --advertise-client-urls https://10.0.45.15:2379 \ --initial-cluster-token etcd-jay-cluster \ --initial-cluster jeb-test-3740=https://10.0.45.15:2380,jeb-test1-3741=https://10.0.45.28:2380,jeb-test2-3742=https://10.0.45.31:2380 \ --initial-cluster-state new \ --data-dir=/var/lib/etcd Restart=on-failure RestartSec=5 LimitNOFILE=65536 [Install] WantedBy=multi-user.target' > etcd.service mv etcd.service /lib/systemd/system/ systemctl daemon-reload systemctl enable etcd systemctl start etcd etcdctl --ca-file=/etc/etcd/ca.pem cluster-health # Flanneld https://github.com/coreos/flannel/releases/ etcdctl --ca-file=/etc/etcd/ca.pem set /flanneld/network/config '{ "Network": "10.32.0.0/16" }' wget https://github.com/coreos/flannel/releases/download/v0.9.0/flannel-v0.9.0-linux-amd64.tar.gz tar -zxpvf flannel-v0.9.0-linux-amd64.tar.gz mv flanneld /usr/local/bin/ mkdir -p /var/lib/kubernetes/flannel/networks echo '[Unit] Description=Network fabric for containers Documentation=https://github.com/coreos/flannel After=etcd.service [Service] Type=notify Restart=always RestartSec=5 ExecStart=/usr/local/bin/flanneld \ -etcd-endpoints=https://10.0.45.15:2379 \ -etcd-keyfile=/etc/etcd/kubernetes-key.pem \ -etcd-certfile=/etc/etcd/kubernetes.pem \ -etcd-cafile=/etc/etcd/ca.pem \ -etcd-prefix=/flanneld/network \ -subnet-file=/var/lib/kubernetes/flannel/subnet.env [Install] WantedBy=multi-user.target' > /lib/systemd/system/flanneld.service systemctl daemon-reload systemctl enable flanneld systemctl start flanneld # Install docker apt-get update && apt-get install -y curl apt-transport-https curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/docker.list deb https://download.docker.com/linux/$(lsb_release -si | tr '[:upper:]' '[:lower:]') $(lsb_release -cs) stable EOF apt-get update && apt-get install -y docker-ce echo '[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target docker.socket firewalld.service flanneld.service Wants=network-online.target Requires=docker.socket [Service] Type=notify EnvironmentFile=-/var/lib/kubernetes/flannel/subnet.env ExecStart=/usr/bin/dockerd -H fd:// --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=1048576 LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target' > /lib/systemd/system/docker.service systemctl daemon-reload systemctl enable docker systemctl start docker # Kubernetes groupadd kube useradd kube -g kube -d /var/lib/kubernetes/ -s /bin/false gpasswd -a kube docker https://github.com/kubernetes/kubernetes/releases/ mkdir -p /var/lib/kubernetes cp /root/certs/ca.pem /root/certs/kubernetes-key.pem /root/certs/kubernetes.pem /var/lib/kubernetes/ chown -R kube:kube /var/lib/kubernetes wget https://storage.googleapis.com/kubernetes-release/release/v1.7.8/bin/linux/amd64/kube-apiserver wget https://storage.googleapis.com/kubernetes-release/release/v1.7.8/bin/linux/amd64/kube-controller-manager wget https://storage.googleapis.com/kubernetes-release/release/v1.7.8/bin/linux/amd64/kube-scheduler wget https://storage.googleapis.com/kubernetes-release/release/v1.7.8/bin/linux/amd64/kubectl wget https://storage.googleapis.com/kubernetes-release/release/v1.7.8/bin/linux/amd64/kubelet wget https://storage.googleapis.com/kubernetes-release/release/v1.7.8/bin/linux/amd64/kube-proxy chmod +x kube-apiserver kube-controller-manager kube-scheduler kubectl kube-proxy kubelet mv kube-apiserver kube-controller-manager kube-scheduler kubectl kube-proxy kubelet /usr/local/bin/ echo '[Unit] Description=Kubernetes API Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes [Service] User=kube ExecStart=/usr/local/bin/kube-apiserver \ --admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota \ --advertise-address=10.0.45.15 \ --service-node-port-range=30000-32767 \ --allow-privileged=true \ --enable-swagger-ui=true \ --apiserver-count=3 \ --authorization-mode=ABAC,RBAC \ --authorization-policy-file=/var/lib/kubernetes/authorization-policy.jsonl \ --bind-address=0.0.0.0 \ --insecure-bind-address=0.0.0.0 \ --service-cluster-ip-range=10.32.0.0/16 \ --kubelet-certificate-authority=/var/lib/kubernetes/ca.pem \ --kubelet-client-certificate=/var/lib/kubernetes/kubernetes.pem \ --kubelet-client-key=/var/lib/kubernetes/kubernetes-key.pem \ --service-account-key-file=/var/lib/kubernetes/kubernetes-key.pem \ --tls-cert-file=/var/lib/kubernetes/kubernetes.pem \ --tls-private-key-file=/var/lib/kubernetes/kubernetes-key.pem \ --tls-ca-file=/var/lib/kubernetes/ca.pem \ --token-auth-file=/var/lib/kubernetes/token.csv \ --etcd-servers=https://10.0.45.15:2379,https://10.0.45.28:2379,https://10.0.45.31:2379 \ --etcd-certfile=/var/lib/kubernetes/kubernetes.pem \ --etcd-keyfile=/var/lib/kubernetes/kubernetes-key.pem \ --etcd-cafile=/var/lib/kubernetes/ca.pem \ --storage-backend=etcd2 \ --storage-media-type=application/json \ --v=2 Restart=on-failure RestartSec=5 LimitNOFILE=65536 [Install] WantedBy=multi-user.target' > kube-apiserver.service mv kube-apiserver.service /lib/systemd/system/ systemctl daemon-reload systemctl enable kube-apiserver echo '[Unit] Description=Kubernetes Controller Manager Documentation=https://github.com/GoogleCloudPlatform/kubernetes [Service] User=kube ExecStart=/usr/local/bin/kube-controller-manager \ --allocate-node-cidrs=true \ --cluster-cidr=10.0.45.0/24 \ --cluster-name=jay-cluster \ --leader-elect=true \ --master=http://10.0.45.15:8080 \ --root-ca-file=/var/lib/kubernetes/ca.pem \ --service-account-private-key-file=/var/lib/kubernetes/kubernetes-key.pem \ --service-cluster-ip-range=10.32.0.0/16 \ --v=2 Restart=on-failure RestartSec=5 LimitNOFILE=65536 [Install] WantedBy=multi-user.target' > kube-controller-manager.service mv kube-controller-manager.service /lib/systemd/system/ systemctl daemon-reload systemctl enable kube-controller-manager echo '[Unit] Description=Kubernetes Scheduler Documentation=https://github.com/GoogleCloudPlatform/kubernetes [Service] User=kube ExecStart=/usr/local/bin/kube-scheduler \ --leader-elect=true \ --master=http://10.0.45.15:8080 \ --v=2 Restart=on-failure RestartSec=5 LimitNOFILE=65536 [Install] WantedBy=multi-user.target' > kube-scheduler.service mv kube-scheduler.service /lib/systemd/system/ systemctl daemon-reload systemctl enable kube-scheduler date +%s | sha256sum | base64 | head -c 32 ; echo echo 'MGY1ZTE1NTQyZjJjOTYzNjU4ZTJiZThj,admin,admin YzRlMWUwOGE2YjM0ZWRlN2UyNWNiODc3,kubelet,kubelet' > /var/lib/kubernetes/token.csv echo '{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user":"*", "nonResourcePath": "*", "readonly": true}} {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user":"admin", "namespace": "*", "resource": "*", "apiGroup": "*"}} {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user":"scheduler", "namespace": "*", "resource": "*", "apiGroup": "*"}} {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group":"system:serviceaccounts", "namespace": "*", "resource": "*", "apiGroup": "*", "nonResourcePath": "*"}}' > /var/lib/kubernetes/authorization-policy.jsonl chown -R kube:kube /var/lib/kubernetes/* systemctl start kube-apiserver systemctl start kube-controller-manager systemctl start kube-scheduler kubectl get componentstatuses # Kube worker mkdir -p /var/lib/kubernetes echo '[Unit] Description=Kubernetes Kubelet Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=docker.service flanneld.service Requires=docker.service [Service] ExecStart=/usr/local/bin/kubelet \ --allow-privileged=true \ --api-servers=https://10.0.45.15:6443,https://10.0.45.28:6443,https://10.0.45.31:6443 \ --cloud-provider= \ --cluster-dns=10.32.0.10 \ --cluster-domain=jaycorp \ --container-runtime=docker \ --docker=unix:///var/run/docker.sock \ --require-kubeconfig \ --kubeconfig=/var/lib/kubernetes/kubeconfig \ --client-ca-file=/var/lib/kubernetes/ca.pem \ --serialize-image-pulls=false \ --tls-cert-file=/var/lib/kubernetes/kubernetes.pem \ --tls-private-key-file=/var/lib/kubernetes/kubernetes-key.pem \ --cpu-cfs-quota=false \ --logtostderr=true \ --port=10250 \ --address=0.0.0.0 \ --pod-cidr=10.32.0.0/16 \ --chaos-chance=0.0 \ --v=2 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target' > /lib/systemd/system/kubelet.service systemctl daemon-reload systemctl enable kubelet echo '[Unit] Description=Kubernetes Proxy Documentation=https://github.com/kubernetes/kubernetes After=flanneld.service [Service] User=root ExecStart=/usr/local/bin/kube-proxy \ --master=http://10.0.45.15:8080 \ --logtostderr=true Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target' > /lib/systemd/system/kube-proxy.service systemctl daemon-reload systemctl enable kube-proxy kubectl config set-credentials admin --token='MGY1ZTE1NTQyZjJjOTYzNjU4ZTJiZThj' --cluster='jay-cluster' --user='admin' --server='https://10.0.45.15:6443' kubectl config set-credentials admin --cluster='jay-cluste'r --client-certificate='/var/lib/kubernetes/kubernetes.pem' --client-key='/var/lib/kubernetes/kubernetes-key.pem' --certificate-authority='/var/lib/kubernetes/ca.pem' --server='https://10.0.45.15:6443' kubectl config set-cluster jay-cluster --certificate-authority='/var/lib/kubernetes/ca.pem' --embed-certs=true --server='https://10.0.45.15:6443' kubectl config set-context admin --cluster=jay-cluster --user=admin --server=https://10.0.45.15:6443 kubectl config use-context admin echo "apiVersion: v1 clusters: - cluster: `grep certificate-authority-data /root/.kube/config` server: https://10.0.45.15:6443 name: jay-cluster contexts: - context: cluster: jay-cluster user: admin name: admin current-context: admin kind: Config preferences: {} users: - name: admin user: token: MGY1ZTE1NTQyZjJjOTYzNjU4ZTJiZThj" > /var/lib/kubernetes/kubeconfig chown -R kube: /var/lib/kubernetes systemctl start kubelet systemctl start kube-proxy kubectl get nodes |
=======TIPS===========
kubectl taint nodes –all node-role.kubernetes.io/master-
etcdctl –ca-file=/etc/etcd/ca.pem cluster-health
kubectl proxy –address=’0.0.0.0’ –port=8001 –accept-hosts=’^*$’
kubectl config view
kubectl get componentstatuses
kubectl get pods –all-namespaces –show-all
kubectl get deployment –all-namespaces –show-all
kubectl get service –all-namespaces
kubectl get nodes
kubectl cluster-info
kubectl get events –namespace=kube-system
kubectl drain
kubectl delete node
source <(kubectl completion bash)
kubectl logs pod/skydns-352548417-bg8r5 skydns –namespace=kube-system
curl http://127.0.0.1:4194/validate/
curl 10.0.45.15:8080/healthz
kubectl cp /tmp/foo
=============================================