[CKA-Exercises]Installation, Configuration & Validation(12%)

418 阅读2分钟
原文链接: blog.kii.la

Installation, Configuration & Validation(12%) [安装,配置和验证 占比 12%]

kubernetes.io > Documentation > Reference > kubectl CLI > kubectl Cheat Sheet

kubernetes.io > Documentation > Tutorials > Using Minikube to create a cluster

kubernetes.io > Documentation > Getting Started > Production Environment > installing kubernetes with deployment tools > Bootstrapping cluster with kubeadm > creating a single control-plane cluster with kubeadm

kubernetes.io > Documentation > Concepts > Cluster Administration > Cluster Networking

kubernetes.io > Documentation > Tasks > TLS > Manage TLS Certificates in a cluster

kubernetes.io > Documentation > Getting Started > Production Environment > Installing Kubernetes with deployment tools > Bootstrapping clusters with kubeadm > Creating Highly Available clusters with kubeadm

kubernetes.io > Documentation > Getting Started > Release notes and version skew

提供部署 Kubernetes 集群的基础设施 > Kubernetes the hard way

Kubernetes 端到端测试 > End to end Test

Install Kubernetes masters and worker nodes [安装 Kubernetes 主节点以及工作节点]

show 如果你想通过 Kubeadm 来实现, 请遵循以下步骤: 在所有节点上运行下列命令, 以准备环境:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$ curl 0fsSL https://download.docker.com/linux/ubuntu/gpg | \
    sudo apt-key add-
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu (l sb_r el ease - cs) \ st abl e" 
$ curl -s https://packages.cloud.google.com/apt/doc/apt-get.gpg | \
    sudo apt-key add -

$ cat << EOF | sudo tee
/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/kubernetes-xenial main
EOF

$ sudo apt-get update
$ sudo apt-get install -y docker18.06.1~ce~3-0~ubuntu \
     kubelet=1.13.5-00 kubeadm=1.13.5-00 kubectl=1.13.5-00"

$ sudo apt-mark hold docker-ce kubelet kubeadm kubectlk 
$ echo "net.bridge.bridge-nf-call-iptables=1" | \
    sudo tee -a /etc/sysctl.conf

$sudo sysctl -p

Master 运行如下程序,并安装组件:

1
2
3
4
5
6
7
# 假设您将使用 `flannel` 作为 POD 网络, 其中 10.244.0.0/16 是强制性要求
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
$ mkdir 0p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $Home/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl apply -f \
    https://raw.githubsercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

运行该命令将 worker 节点与 master 节点连接起来

1
2
$ sudo kubeadm join
$ kubectl get nodes -o wide

Configure secure cluster communications [配置安全的集群通信]

show

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
# 创建 CA 私钥
$ openssl genrsa -out ca.key 2048


# 使用私钥创建 CSR 
$ openssl req -new -key ca.key -subj "/CN=KUBERNETES_CA" \
    -out ca.csr

# 使用自己的私钥自签署 csr
$ openssl x509 -req -in ca.csr -signkey ca.key \
    -CAcreateserial out ca.crt -days 1000

# 为管理用户生成私钥
$ openssl genrsa -out admin.key 2048

# 为管理用户生成 CSR. 注意 OUT.
$ openssl req -new -key admin.key -subj "CN=admin/O=system:masters" \
     -out.csr


# 使用 CA 服务器私钥为管理用户签署证书
$ openssl x509 -req -in admin.csr -CA ca.crt \
    -CAkey ca.key -CAcreateserial -out admin.crt -days 1000

# 生成 kube-controller-manager 客户端证书和私钥
$ openssl genrsa -out kube-controller-manager.key 2048
$ openssl req -new -key kube-controller-manager.key \
    -subj "/CN=system:kube-controller-manager" \ 
    -out kube-controller-manager.csr
$ openssl x509 -req -in kube-controller-manager.csr \
    -CA ca.crt -CAkey ca.key -CAcreateserial -out kube-contro

# 生成 kube-proxy 客户端证书和私钥
$ openssl genrsa -out kube-proxy.key 2048
$ openssl req -new -key kube-proxy.key -subj "/CN=system:kube-proxy" \
    -out kube-proxy.csr
$ openssl x509 -req -in kube-proxy.csr -CA ca.crt \
    -CAkey ca.key -CAcreateserial -out kube-proxy.crt -days 1000


# 生成 kube-scheduler 客户端证书和私钥
$ openssl genrsa -out kube-scheduler.key 2048
$ openssl req -new -key kube-scheduler.key  \
    -subj "/CN=system:kube-scheduler" -out kube-scheduler.csr
$ openssl x509 -req -in kube-scheduler.csr -CA ca.crt \
    -CAkey ca.key -CAcreateserial -out kube-scheduler -days 1000

# Kubernetes API 服务证书

cat > openssl.cnf <<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyuUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt-names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
IP.1 = 10.96.0.1
IP.2 = 192.168.5.11
IP.3 = 192.168.5.12
IP.4 = 192.168.5.30
EOF

# 为 kube-apiserver 生成证书
$ openssl genrsa -out kube-apiserver.key 2048
$ openssl req -new -key kube-apiserver.key -subj "/CN=kube-apiserver" \
    -out kube-apiserver.csr -config openssl.cnf
$ openssl x509 -req -in kube-apiserver.csr -CA ca.crt \ 
    -CAkey ca.key -CAcreateserial -out kube-apiserver \
    -extensions v3_req -extfile openssl.cnf -days 1000


# ETCD 服务证书
$ cat > openssl-etcd.cnf <<EOF
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.5.11
IP.2 = 192.168.5.12
IP.3 = 127.0.0.1
EOF

# 为 ETCD 生成证书
$ openssl genrsa -out service-account.key 2048
$ openssl req -new -key service-account.key \
    -subj "/CN=service-accounts" -out service-account.csr
$ open ssl x509 -req -in service-account.csr -CA ca.crt \
    -CAkey ca.key -CAcreateserial -out service-account.crt \
    -days 1000

Configure a Highly-Available Kubernetes cluster

show 如果您想在多个实例之间分发 etcd 服务, 请遵循以下步骤:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$ kubectl get endpoints kube-scheduler -n kube-system -o yaml
$ kube-controller-manager --leader-elect true


$ cat /etc/systemd/system/kube-apiserver.service
# --etcd-servers=https://IP:2379, https://IP:2379

$ wget -q --https-only "https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz"

$ tar -xvf ecd-v3.3.9-linux-amd64.tar.gz
$ mkdir -p /etc/etcd /var/lib/etcd
$ cp ca.pem kubernetes-key.pem kubernetes.pem /etc/etcd

$ etcd.service
# --initial-cluster peer-1=https://${PEER1_IP}:2380,peer-2=https://${PPER2_IP}:2380

$ export ETCDCTL_API=3

# 使用栈 etcd 初始化集群.
$ sudo kubeadm init --config=kubeadm-config.yaml

如你只想有多个 kube-api 服务, 请遵循以下步骤:

1
2
3
4
apirVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: stable
controPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"
1
$ sudo kubeadm init --config=kubeadm-config.yaml

Know where to get the Kubernetes release binaries [了解从哪里获得 Kubernetes 发布的二进制文件]

show Kubernetes GitHub 主仓库地址 : github.com/kubernetes/…



$ weget https://github.com/kubernetes/kubernetes/release/download/v1.13.5/kubernetes.tar.gz
$ tar -xzvf kubernetes.tar.gz
$ cd kubernetes

要下载集群操作系统的实际二进制文件, 请运行如下命令:



$ cluster/get-kube-binaries.sh
$ cd server
$ tar -xzvf kubernetes-server-linux-amd64.tar.gz
$ ls kubernetes/server/bin

Choose a network solution [选择一个网络解决方案]

show 网路插件 CNI 扩展了 Kubernetes 的功能. 使用此链接可以查看各种不同的插件:

kubernetes.io/docs/concep…

Run end-to-end tests on your cluster [运行段对端测试在您的集群中]

show 验证你可以运行如下的检查项目:
1. Deployments 是否可运行
2. Pods 是否可运行
3. Pods 是否可直接访问
4. Logs 是否可收集
5. 控制台是否可在 Pod 中运行
6. Services 是否可提供访问
7. Node 是否健康
8. Pod 是否健康



$ kubectl run nginx --image=nginx
$ kubectl get deployments
$ kubectl get pod
$ kubectl get pods -n kube-system
$ kubectl port-forward nginx 8081:80
$ curl --head http://127.0.0.1:8081
$ kubectl logs nginx
$ kubectl exec -it nginx --nginx -v
$ kubectl expose deployment nginx --port 80 --type NodePort
$ kubectl get services
$ curl -I localhost:<node port>
$ kubectl get nodes
$ kubectl describe nodes
$ kubectl describe pods 

Analyse end-to-end tests results [分析端到端测试结果]

show



$ go get -u k8s.io/test-infra/kubetest
$ kubetest --extract=v1.11.3
$ export KUBE_MASTER_IP="IP ADDRESS"
$ export KUBE_MASTER=<master host>
$ cd kubernetes
$ kubetest --test --provider=skeleton > output.txt

为了一致性测试运行如下命令:



$ kubetest --test --provider=skeleton \
    --test_args="--ginkgo.focus=\[Conformance\]" > output.txt

Run Node end-to-end tests [运行端对端测试]

show



$ kubectl get pods
$ kubectl get pods -n kube-system
$ service kube-apiserver status
$ service kube-controller-manager status
$ service kube-scheduler status
$ service kubelet status
$ service kube-proxy status
$ kubectl run nginx --image=nginx
$ kubectl scale replicas=3 deploy/nginx

Kubernetes 测试套件位于 -> github.com/kubernetes/…