1.安装


1. 添加yum 源

vi /etc/yum.repos.d/k8s.repo #存在则修改,不存在则创建

1
2
3
4
5
6
7
8
# 保存为以下内容
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

搜索查看源是否正常
sudo yum search kube

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Loaded plugins: langpacks
========================================================================================== N/S matched: kube ===========================================================================================
cockpit-kubernetes.x86_64 : Cockpit user interface for Kubernetes cluster
kubeadm.x86_64 : Command-line utility for administering a Kubernetes cluster.
kubectl.x86_64 : Command-line utility for interacting with a Kubernetes cluster.
kubernetes-ansible.noarch : Playbook and set of roles for seting up a Kubernetes cluster onto machines
kubernetes-client.x86_64 : Kubernetes client tools
kubernetes-cni.x86_64 : Binaries required to provision kubernetes container networking
kubernetes-master.x86_64 : Kubernetes services for master host
kubernetes-node.x86_64 : Kubernetes services for node host
python2-kubernetes.noarch : Kubernetes Python Client
python2-kubernetes-tests.noarch : Tests python-kubernetes library
rsyslog-mmkubernetes.x86_64 : Provides the mmkubernetes module
kompose.x86_64 : Tool to move from 'docker-compose' to Kubernetes
kubelet.x86_64 : Container cluster management
kubernetes.x86_64 : Container cluster management

这里只需要安装 kubeadm 即可,kubeadm 会依赖安装 kubectl kubelet

2.安装 kubeadm

yum install kubeadm

3. 初始化集群(网上查询需要关闭 swap ,我这里没有关闭也可以安装成功)

kubeadm init --apiserver-advertise-address IP地址 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16

--image-repository : 镜像源,默认在墙外,国内更换为 阿里云 registry.aliyuncs.com/google_containers
--pod-network-cidr : 这个设置的值和相关的组件有关系 ,我这里用的是 flannel 网络组件,固定设置
参考链接:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network
安装完成后可以用 kubeadm reset 恢复,该操作会恢复部分操作

Note: 可能出现的问题:

failed to find subsystem mount for required subsystem: pids

当前系统不支持 pids 子系统
vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
解决办法 在ExecStart后添加 --feature-gates SupportPodPidsLimit=false --feature-gates SupportNodePidsLimit=false

1
2
3
 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --feature-gates SupportPodPidsLimit=false --feature-gates SupportNodePidsLimit=false
> systemctl daemon-reload  # 重新加载  service unit
> systemctl restart kubelet # 重启服务

4.安装网络组件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

Note:

unable to recognize "kube-flannel.yml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused

在没有配置config文件时,kube-apiserver默认使用的是localhost,解决方法如下:

1
2
3
4
# 普通用户
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

转载于 https://blog.csdn.net/nange_nice/article/details/82773801

5.安装成功后

kubectl create deployment nginx --image=nginx:alpine
kubectl get pods

1
2
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-76bddcbb9b-fjd8q   0/1     Pending   0          27m

并没有成功启动
kubectl describe pod nginx-deployment-76bddcbb9b-fjd8q
events 提示如下:

1
2
3
4
Events:
  Type     Reason            Age                 From               Message
  ----     ------            ----                ----               -------
  Warning  FailedScheduling  17s (x20 over 28m)  default-scheduler  0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.

提示没有节点可用

查看当前所有节点
kubectl get nodes

1
2
NAME           STATUS   ROLES    AGE   VERSION
master-node   Ready    master   17h   v1.16.3

当前只有一个节点 ,节点身份为 master
目前只部署了一个 master 节点,默认 master 节点不会接受 pod 的调度,因为 master 添加 taint
参考: https://www.kubernetes.org.cn/5906.html 第 3 部分 NODE

查看当前 master 节点信息
kubectl describe node master-node

1
2
#发现有 taints 标识
Taints:             node-role.kubernetes.io/master:NoSchedule

取消 taint
kubectl taint nodes master-node node-role.kubernetes.io/master-
重新添加 taint(如果有需要)
kubectl taint nodes master-node node-role.kubernetes.io/master:NoSchedule
查看 nginx 启动状态,正常
kubectl get pods

1
2
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-76bddcbb9b-fjd8q   1/1     Running   0          43m