91. kubernetes¶
下载安装kubectl [1]
如果是和 :doc: minikube <./minikube> 一起使用的话,只需要下载client端就可以了。
curl -OL https://dl.k8s.io/v1.18.0/kubernetes-client-linux-arm64.tar.gz
91.1. 常用命令¶
kubectl cluster-info # 查看集群信息
kubectl config view #
-------------------
kubectl get # 列出资源
kubectl get nodes # 查看节点信息
kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 # 创建deployments
kubectl get deployments # 查看deployments
kubectl get pods # 查看pods
kubectl get events # 查看事件, 操作出错记录
kubectl get services # 查看服务
---------------------
kubectl describe # 显示资源详情
---------------------
kubectl logs # 打印容器的日志
---------------------
kubectl exec # 在一个容器中执行命令
---------------------
kubectl -n service rollout restart deployment <name> # 重启服务
也可以设置命令自动补全 [6]
kubectl completion bash >/etc/bash_completion.d/kubectl
kubeadm completion bash >/etc/bash_completion.d/kubeadm
minikube [5] 官方未支持aarch64
91.2. 简单概念¶
- Matser 负责管理集群 [3]
- Node 是一个VM或者是物理机, kubernetes 集群的 worker [4] 一个Node至少要运行
- Kubelet 一个在Node上负责和Master沟通的进程,管理运行在Node上的容器。
- 容器引擎,如Docker,拉取镜像,运行容器
- Deployments 一个部署, 描述使用什么镜像,多少个副本容器等配置。通过过Kubernetes API告诉集群执行部署。
* Creating kvm2 VM (CPUs=2, Memory=2000MB, Disk=20000MB) ...
E0421 09:15:04.389896 79372 cache_images.go:86] CacheImage k8s.gcr.io/coredns-arm64:1.6.5 -> /home/user1/.minikube/cache/images/k8s.gcr.io/coredns-arm64_1.6.5 failed: write: MANIFEST_UNKNOWN: "fetch \"1.6.5\" from request \"/v2/coredns-arm64/manifests/1.6.5\"."
*
X Unable to start VM. Please investigate and run 'minikube delete' if possible
* Error: [DRIVER_CORRUPT] new host: Error attempting to get plugin server address for RPC: Failed to dial the plugin server in 10s
* Suggestion: The VM driver exited with an error, and may be corrupt. Run 'minikube start' with --alsologtostderr -v=8 to see the error
* Documentation: https://minikube.sigs.k8s.io/docs/reference/drivers/
91.3. 安装部署集群¶
添加kubernetes软件源
curl -s https://packages.cloud.google.com/apt/doc/apt-key.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
检查所需的镜像是否能获得
kubeadm config images pull
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装网络插件
sudo kubeadm init
kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml
kubectl get nodes #确认master ready
kubeadm token create --print-join-command
91.3.1. workder¶
手动部署: [2]
加载br_netfilter
lsmod | grep br_netfilter
sudo modprobe br_netfilter
设置操作系统参数,br_netfilter没有加载的话时没有这两个变量的
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system # 应用到系统
添加kubernetes软件源
curl -s https://packages.cloud.google.com/apt/doc/apt-key.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 kubeadm join 192.168.1.180:6443 --token yzep8d.7svs6hvljrhqk562 \
--discovery-token-ca-cert-hash sha256:83e29e1b29c1a11cdcb067c5da9ae58d9e11c2c15dfaa092f5b0ce3aa625b0f9
91.4. haproxy¶
编辑配置文件
global
daemon
defaults
mode http
frontend k8s-api-server-in
bind 0.0.0.0:8443
mode tcp
default_backend k8s-api-server-host
backend k8s-api-server-host
balance roundrobin
server master1 192.168.122.100:6443
server master2 192.168.122.101:6443
server master3 192.168.122.102:6443
启动服务
docker run -d --name my-haproxy \
-v /etc/haproxy:/usr/local/etc/haproxy:ro \
-p 8443:8443 \
-p 1080:1080 \
--restart always \
haproxy:latest
91.5. kubernetes yaml¶
yaml文件描述:
apiVersion: | api版本 |
---|---|
kind: | 资源类型。可以是pod, node, configMap |
metadata: | 元数据。 名称,标签,注解 |
spec: | 规格。 容器列表,volume |
status: | 状态。 内部详细状态 |
91.6. 问题记录¶
91.6.1. running with swap on is not supported. Please disable swap¶
user1@Arm64-server:~$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
I0510 21:10:40.951053 25602 version.go:240] remote version is much newer: v1.18.2; falling back to: stable-1.14
[init] Using Kubernetes version: v1.14.10
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 19.03.8. Latest validated version: 18.09
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR Swap]: running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
解决办法
sudo swapoff -a
91.6.2. WARNING: kubeadm cannot validate component configs for API group¶
user1@Arm64-server:~$ kubeadm config images pull
W0511 23:20:25.155396 59650 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[config/images] Pulled k8s.gcr.io/kube-apiserver:v1.18.2
[config/images] Pulled k8s.gcr.io/kube-controller-manager:v1.18.2
[config/images] Pulled k8s.gcr.io/kube-scheduler:v1.18.2
[config/images] Pulled k8s.gcr.io/kube-proxy:v1.18.2
[config/images] Pulled k8s.gcr.io/pause:3.2
[config/images] Pulled k8s.gcr.io/etcd:3.4.3-0
[config/images] Pulled k8s.gcr.io/coredns:1.6.7
91.6.3. Public key for is not installed¶
Public key for fdd1728b8dd0026e64a99ebb87d5b7a6c026a8e2f4796e383cc7ac43e7d7ccf2-kubelet-1.18.2-0.aarch64.rpm is not installed
Public key for 98b57cf856484f0d15a58705136d9319e57c5b80bea2eea93cf02bb2365651dc-kubernetes-cni-0.7.5-0.aarch64.rpm is not installed
Public key for socat-1.7.3.2-6.el8.aarch64.rpm is not installed. Failing package is: socat-1.7.3.2-6.el8.aarch64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Public key for conntrack-tools-1.4.4-9.el8.aarch64.rpm is not installed. Failing package is: conntrack-tools-1.4.4-9.el8.aarch64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Public key for iptables-1.8.2-16.el8.aarch64.rpm is not installed. Failing packa
91.6.4. Failed to set locale, defaulting to C.UTF-8” in CentOS 8¶
解决办法
dnf install langpacks-en glibc-all-langpacks -y
91.6.5. UnicodeEncodeError: ‘ascii’ codec can’t encode character u’u2013’¶
[root@localhost ~]# dnf install -y kubelet kubeadm kubectl –disableexcludes=kubernetes
Last metadata expiration check: 0:00:07 ago on Mon 08 Jun 2020 07:56:12 PM CST.
No match for argument: kubelet
No match for argument: kubeadm
No match for argument: kubectl
File "/usr/lib/python2.7/site-packages/dnf/cli/commands/install.py", line 180, in _install_packages
logger.info(msg, self.base.output.term.bold(pkg_spec))
File "/usr/lib/python2.7/site-packages/dnf/cli/term.py", line 247, in bold
return self.color('bold', s)
File "/usr/lib/python2.7/site-packages/dnf/cli/term.py", line 243, in color
return (self.MODE[color] + str(s) + self.MODE['normal'])
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 0: ordinal not in range(128)
我的情况是kubenetes.yaml含有中文字符,修改exclude之后成功
dnf install -y kubelet kubeadm kubectl
[1] | https://kubernetes.io/docs/setup/release/notes/#downloads-for-v1-18-0 |
[2] | https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ |
[3] | https://kubernetes.io/docs/tutorials/kubernetes-basics/create-cluster/ |
[4] | https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/ |
[5] | https://kubernetes.io/docs/tasks/tools/install-minikube/ |
[6] | https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion |
[7] | https://console.cloud.google.com/gcr/images/google-containers/GLOBAL |
[8] | https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/ |