From 69b55b82f8cb3be8ca60d174956f259f096b306c Mon Sep 17 00:00:00 2001 From: wizard Date: Fri, 26 Jun 2015 20:14:32 +0800 Subject: [PATCH 1/2] update k8s to 0.19.3 --- cluster/ubuntu/build.sh | 8 ++++++-- cluster/ubuntu/config-default.sh | 2 +- cluster/ubuntu/util.sh | 24 ++++++++++++++++++++---- docs/getting-started-guides/README.md | 2 +- docs/getting-started-guides/ubuntu.md | 4 ++-- 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/cluster/ubuntu/build.sh b/cluster/ubuntu/build.sh index a61e2daead2..e27127b8e6e 100755 --- a/cluster/ubuntu/build.sh +++ b/cluster/ubuntu/build.sh @@ -42,8 +42,10 @@ cp flannel-${FLANNEL_VERSION}/flanneld binaries/minion # ectd echo "Download etcd release ..." -ETCD_VERSION=${ETCD_VERSION:-"2.0.9"} + +ETCD_VERSION=${ETCD_VERSION:-"2.0.12"} ETCD="etcd-v${ETCD_VERSION}-linux-amd64" + if [ ! -f etcd.tar.gz ] ; then curl -L https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/${ETCD}.tar.gz -o etcd.tar.gz tar xzf etcd.tar.gz @@ -53,7 +55,8 @@ cp $ETCD/etcd $ETCD/etcdctl binaries/minion # k8s echo "Download kubernetes release ..." -K8S_VERSION=${K8S_VERSION:-"0.18.0"} +K8S_VERSION=${K8S_VERSION:-"0.19.3"} + if [ ! -f kubernetes.tar.gz ] ; then curl -L https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v${K8S_VERSION}/kubernetes.tar.gz -o kubernetes.tar.gz tar xzf kubernetes.tar.gz @@ -71,4 +74,5 @@ cp kubernetes/server/kubernetes/server/bin/kubelet \ cp kubernetes/server/kubernetes/server/bin/kubectl binaries/ rm -rf flannel* kubernetes* etcd* + echo "Done! All your commands locate in ./binaries dir" diff --git a/cluster/ubuntu/config-default.sh b/cluster/ubuntu/config-default.sh index adf90a2e2f6..66870bafd44 100755 --- a/cluster/ubuntu/config-default.sh +++ b/cluster/ubuntu/config-default.sh @@ -37,7 +37,7 @@ echo $FLANNEL_NET export FLANNEL_OPTS=${FLANNEL_OPTS:-"Network": 172.16.0.0/16} # Admission Controllers to invoke prior to persisting objects in cluster -ADMISSION_CONTROL=${ADMISSION_CONTROL:-NamespaceLifecycle,NamespaceAutoProvision,LimitRanger,ServiceAccount,ResourceQuota} +export ADMISSION_CONTROL=NamespaceLifecycle,NamespaceAutoProvision,LimitRanger,ServiceAccount,ResourceQuota # Optional: Enable node logging. ENABLE_NODE_LOGGING=false diff --git a/cluster/ubuntu/util.sh b/cluster/ubuntu/util.sh index dea42be21ee..c7df19f1aa0 100755 --- a/cluster/ubuntu/util.sh +++ b/cluster/ubuntu/util.sh @@ -183,6 +183,16 @@ function verify-minion(){ printf "\n" } +function genServiceAccountsKey() { + SERVICE_ACCOUNT_LOOKUP=${SERVICE_ACCOUNT_LOOKUP:-false} + SERVICE_ACCOUNT_KEY=${SERVICE_ACCOUNT_KEY:-"/tmp/kube-serviceaccount.key"} + # Generate ServiceAccount key if needed + if [[ ! -f "${SERVICE_ACCOUNT_KEY}" ]]; then + mkdir -p "$(dirname ${SERVICE_ACCOUNT_KEY})" + openssl genrsa -out "${SERVICE_ACCOUNT_KEY}" 2048 2>/dev/null + fi +} + function create-etcd-opts(){ cat < ~/kube/default/etcd ETCD_OPTS="-name $1 \ @@ -200,13 +210,17 @@ KUBE_APISERVER_OPTS="--address=0.0.0.0 \ --port=8080 \ --etcd_servers=http://127.0.0.1:4001 \ --logtostderr=true \ ---service-cluster-ip-range=${1}" +--service-cluster-ip-range=${1} \ +--admission_control=${2} \ +--service_account_key_file=/tmp/kube-serviceaccount.key \ +--service_account_lookup=false " EOF } function create-kube-controller-manager-opts(){ cat < ~/kube/default/kube-controller-manager KUBE_CONTROLLER_MANAGER_OPTS="--master=127.0.0.1:8080 \ +--service_account_private_key_file=/tmp/kube-serviceaccount.key \ --logtostderr=true" EOF @@ -307,7 +321,7 @@ function detect-minions { } # Instantiate a kubernetes cluster on ubuntu -function kube-up { +function kube-up() { KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../.. source "${KUBE_ROOT}/cluster/ubuntu/${KUBE_CONFIG_FILE-"config-default.sh"}" @@ -361,9 +375,10 @@ function provision-master() { # remote login to MASTER and use sudo to configue k8s master ssh $SSH_OPTS -t $MASTER "source ~/kube/util.sh; \ + genServiceAccountsKey; \ setClusterInfo; \ create-etcd-opts "${mm[${MASTER_IP}]}" "${MASTER_IP}" "${CLUSTER}"; \ - create-kube-apiserver-opts "${SERVICE_CLUSTER_IP_RANGE}"; \ + create-kube-apiserver-opts "${SERVICE_CLUSTER_IP_RANGE}" "${ADMISSION_CONTROL}"; \ create-kube-controller-manager-opts "${MINION_IPS}"; \ create-kube-scheduler-opts; \ create-flanneld-opts; \ @@ -402,8 +417,9 @@ function provision-masterandminion() { # remote login to the node and use sudo to configue k8s ssh $SSH_OPTS -t $MASTER "source ~/kube/util.sh; \ setClusterInfo; \ + genServiceAccountsKey; \ create-etcd-opts "${mm[${MASTER_IP}]}" "${MASTER_IP}" "${CLUSTER}"; \ - create-kube-apiserver-opts "${SERVICE_CLUSTER_IP_RANGE}"; \ + create-kube-apiserver-opts "${SERVICE_CLUSTER_IP_RANGE}" "${ADMISSION_CONTROL}"; \ create-kube-controller-manager-opts "${MINION_IPS}"; \ create-kube-scheduler-opts; \ create-kubelet-opts "${MASTER_IP}" "${MASTER_IP}" "${DNS_SERVER_IP}" "${DNS_DOMAIN}"; diff --git a/docs/getting-started-guides/README.md b/docs/getting-started-guides/README.md index d4cbae73b7d..7ebd2b26364 100644 --- a/docs/getting-started-guides/README.md +++ b/docs/getting-started-guides/README.md @@ -33,7 +33,7 @@ Joyent | Juju | Ubuntu | flannel | [docs](../../docs/g AWS | Saltstack | Ubuntu | OVS | [docs](../../docs/getting-started-guides/aws.md) | | Community (@justinsb) | Uses K8s version 0.5.0 Vmware | CoreOS | CoreOS | flannel | [docs](../../docs/getting-started-guides/coreos.md) | | Community (@kelseyhightower) | Uses K8s version 0.15.0 Azure | Saltstack | Ubuntu | OpenVPN | [docs](../../docs/getting-started-guides/azure.md) | | Community | -Bare-metal | custom | Ubuntu | flannel | [docs](../../docs/getting-started-guides/ubuntu.md) | | Community (@resouer @WIZARD-CXY) | use k8s version 0.18.0 +Bare-metal | custom | Ubuntu | flannel | [docs](../../docs/getting-started-guides/ubuntu.md) | | Community (@resouer @WIZARD-CXY) | use k8s version 0.19.3 Local | | | _none_ | [docs](../../docs/getting-started-guides/locally.md) | | Community (@preillyme) | libvirt/KVM | CoreOS | CoreOS | libvirt/KVM | [docs](../../docs/getting-started-guides/libvirt-coreos.md) | | Community (@lhuard1A) | oVirt | | | | [docs](../../docs/getting-started-guides/ovirt.md) | | Community (@simon3z) | diff --git a/docs/getting-started-guides/ubuntu.md b/docs/getting-started-guides/ubuntu.md index d7a69bfaa4a..c10faf5892a 100644 --- a/docs/getting-started-guides/ubuntu.md +++ b/docs/getting-started-guides/ubuntu.md @@ -22,7 +22,7 @@ This document describes how to deploy kubernetes on ubuntu nodes, including 1 ma *3 These guide is tested OK on Ubuntu 14.04 LTS 64bit server, but it should also work on most Ubuntu versions* -*4 Dependences of this guide: etcd-2.0.9, flannel-0.4.0, k8s-0.18.0, but it may work with higher versions* +*4 Dependences of this guide: etcd-2.0.12, flannel-0.4.0, k8s-0.19.3, but it may work with higher versions* *5 All the remote servers can be ssh logged in without a password by using key authentication* @@ -35,7 +35,7 @@ then `$ cd kubernetes/cluster/ubuntu`. Then run `$ ./build.sh`, this will download all the needed binaries into `./binaries`. -You can customize your etcd version, flannel version, k8s version by changing variable `ETCD_VERSION` , `FLANNEL_VERSION` and `K8S_VERSION` in build.sh, default etcd version is 2.0.9, flannel version is 0.4.0 and K8s version is 0.18.0. +You can customize your etcd version, flannel version, k8s version by changing variable `ETCD_VERSION` , `FLANNEL_VERSION` and `K8S_VERSION` in build.sh, default etcd version is 2.0.12, flannel version is 0.4.0 and K8s version is 0.19.3. Please make sure that there are `kube-apiserver`, `kube-controller-manager`, `kube-scheduler`, `kubelet`, `kube-proxy`, `etcd`, `etcdctl` and `flannel` in the binaries/master or binaries/minion directory. From f7779a8162b54dc85b302f7a4e21bbf09b318e4d Mon Sep 17 00:00:00 2001 From: wizard Date: Wed, 1 Jul 2015 15:59:38 +0800 Subject: [PATCH 2/2] update kubedns on ubuntu --- cluster/ubuntu/deployAddons.sh | 11 ++- cluster/ubuntu/skydns-rc.yaml.template | 106 +++++++++++++----------- cluster/ubuntu/skydns-svc.yaml.template | 30 ++++--- 3 files changed, 84 insertions(+), 63 deletions(-) diff --git a/cluster/ubuntu/deployAddons.sh b/cluster/ubuntu/deployAddons.sh index 29ca5d12afd..36f0064f08f 100755 --- a/cluster/ubuntu/deployAddons.sh +++ b/cluster/ubuntu/deployAddons.sh @@ -19,13 +19,16 @@ set -e KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../.. -source "config-default.sh" +source "util.sh" +detect-master +KUBE_SERVER="http:\/\/${KUBE_MASTER_IP}:8080" if [ "${ENABLE_CLUSTER_DNS}" == true ]; then echo "Deploying DNS on kubernetes" - sed -e "s/{{ pillar\['dns_replicas'\] }}/${DNS_REPLICAS}/g;s/{{ pillar\['dns_domain'\] }}/${DNS_DOMAIN}/g" skydns-rc.yaml.template > skydns-rc.yaml + sed -e "s/{{ pillar\['dns_replicas'\] }}/${DNS_REPLICAS}/g;s/{{ pillar\['dns_domain'\] }}/${DNS_DOMAIN}/g;s/kube_server_url/${KUBE_SERVER}/g;" skydns-rc.yaml.template > skydns-rc.yaml sed -e "s/{{ pillar\['dns_server'\] }}/${DNS_SERVER_IP}/g" skydns-svc.yaml.template > skydns-svc.yaml + # use kubectl to create skydns rc and service - "${KUBE_ROOT}/cluster/kubectl.sh" create -f skydns-rc.yaml - "${KUBE_ROOT}/cluster/kubectl.sh" create -f skydns-svc.yaml + "${KUBE_ROOT}/cluster/kubectl.sh" --namespace=kube-system create -f skydns-rc.yaml + "${KUBE_ROOT}/cluster/kubectl.sh" --namespace=kube-system create -f skydns-svc.yaml fi diff --git a/cluster/ubuntu/skydns-rc.yaml.template b/cluster/ubuntu/skydns-rc.yaml.template index b13ad7c6b79..f3a02c610e9 100644 --- a/cluster/ubuntu/skydns-rc.yaml.template +++ b/cluster/ubuntu/skydns-rc.yaml.template @@ -1,49 +1,61 @@ +apiVersion: v1 kind: ReplicationController -apiVersion: v1beta1 -id: kube-dns -namespace: kube-system -labels: - k8s-app: kube-dns - kubernetes.io/cluster-service: "true" -desiredState: - replicas: {{ pillar['dns_replicas'] }} - replicaSelector: +metadata: + name: kube-dns-v4 + namespace: kube-system + labels: k8s-app: kube-dns - podTemplate: - labels: - name: kube-dns - k8s-app: kube-dns - kubernetes.io/cluster-service: "true" - desiredState: - manifest: - version: v1beta2 - id: kube-dns - dnsPolicy: "Default" # Don't use cluster DNS. - containers: - - name: etcd - image: quay.io/coreos/etcd:v2.0.3 - command: [ - # entrypoint = "/etcd", - "-listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001", - "-initial-cluster-token=skydns-etcd", - "-advertise-client-urls=http://127.0.0.1:4001", - ] - - name: kube2sky - image: gcr.io/google_containers/kube2sky:1.1 - command: [ - # entrypoint = "/kube2sky", - "-domain={{ pillar['dns_domain'] }}", - ] - - name: skydns - image: gcr.io/google_containers/skydns:2015-03-11-001 - command: [ - # entrypoint = "/skydns", - "-machines=http://localhost:4001", - "-addr=0.0.0.0:53", - "-domain={{ pillar['dns_domain'] }}.", - ] - ports: - - name: dns - containerPort: 53 - protocol: UDP - + version: v4 + kubernetes.io/cluster-service: "true" +spec: + replicas: {{ pillar['dns_replicas'] }} + selector: + k8s-app: kube-dns + version: v4 + template: + metadata: + labels: + k8s-app: kube-dns + version: v4 + kubernetes.io/cluster-service: "true" + spec: + containers: + - name: etcd + image: gcr.io/google_containers/etcd:2.0.9 + command: + - /usr/local/bin/etcd + - -listen-client-urls + - http://127.0.0.1:2379,http://127.0.0.1:4001 + - -advertise-client-urls + - http://127.0.0.1:2379,http://127.0.0.1:4001 + - -initial-cluster-token + - skydns-etcd + - name: kube2sky + image: gcr.io/google_containers/kube2sky:1.10 + args: + # command = "/kube2sky" + - -domain={{ pillar['dns_domain'] }} + - -kube_master_url=kube_server_url + - name: skydns + image: gcr.io/google_containers/skydns:2015-03-11-001 + args: + # command = "/skydns" + - -machines=http://localhost:4001 + - -addr=0.0.0.0:53 + - -domain={{ pillar['dns_domain'] }}. + ports: + - containerPort: 53 + name: dns + protocol: UDP + - containerPort: 53 + name: dns-tcp + protocol: TCP + livenessProbe: + exec: + command: + - /bin/sh + - -c + - nslookup kubernetes.default.svc.{{ pillar['dns_domain'] }} localhost >/dev/null + initialDelaySeconds: 30 + timeoutSeconds: 5 + dnsPolicy: Default # Don't use cluster DNS. \ No newline at end of file diff --git a/cluster/ubuntu/skydns-svc.yaml.template b/cluster/ubuntu/skydns-svc.yaml.template index 6a76b0ac759..242c8871eec 100644 --- a/cluster/ubuntu/skydns-svc.yaml.template +++ b/cluster/ubuntu/skydns-svc.yaml.template @@ -1,14 +1,20 @@ +apiVersion: v1 kind: Service -apiVersion: v1beta1 -id: kube-dns -namespace: kube-system -protocol: UDP -port: 53 -portalIP: {{ pillar['dns_server'] }} -containerPort: 53 -labels: - k8s-app: kube-dns +metadata: name: kube-dns - kubernetes.io/cluster-service: "true" -selector: - k8s-app: kube-dns + namespace: kube-system + labels: + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: "KubeDNS" +spec: + selector: + k8s-app: kube-dns + clusterIP: {{ pillar['dns_server'] }} + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP