系统:centos 7.7
内核: 5.3.7-1.el7.elrepo.x86_64
Linux查看版本当前操作系统内核信息
1 |
<span class="token function">uname</span> -a |
1 |
Linux foxdev 5.3.7-1.el7.elrepo.x86_64 |
Linux查看当前操作系统版本信息
1 |
<span class="token function">cat</span> /proc/version |
1 |
Linux version 5.3.7-1.el7.elrepo.x86_64 <span class="token punctuation">(</span>mockbuild@Build64R7<span class="token punctuation">)</span> <span class="token punctuation">(</span>gcc version 4.8.5 20150623 <span class="token punctuation">(</span>Red Hat 4.8.5-39<span class="token punctuation">)</span> <span class="token punctuation">(</span>GCC<span class="token punctuation">))</span> |
Linux查看版本当前操作系统发行版信息
1 |
<span class="token function">cat</span> /etc/redhat-release |
1 |
CentOS Linux release 7.7.1908 <span class="token punctuation">(</span>Core<span class="token punctuation">)</span> |
1 |
yum update -y yum <span class="token function">install</span> -y <span class="token function">wget</span> <span class="token function">curl</span> vim |
fox.风
设置主机名
1 |
hostnamectl set-hostname foxk8s |
设置域名解析
1 |
<span class="token function">cat</span> <span class="token operator"><<</span>EOF <span class="token operator">>></span>/etc/hosts 192.168.0.254 foxk8s EOF |
关闭防火墙 、selinux和swap
1 |
systemctl disable firewalld --now setenforce 0 <span class="token function">sed</span> -i <span class="token string">"s/^SELINUX=enforcing/SELINUX=disabled/g"</span> /etc/selinux/config swapoff -a <span class="token keyword">echo</span> <span class="token string">"vm.swappiness = 0"</span><span class="token operator">>></span> /etc/sysctl.conf <span class="token function">sed</span> -i <span class="token string">'s/.*swap.*/#&/'</span> /etc/fstab sysctl -p |
配置内核参数,将桥接的IPv4流量传递到iptables的链
1 |
<span class="token function">cat</span> <span class="token operator">></span> /etc/sysctl.d/k8s.conf <span class="token operator"><<</span><span class="token string">EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF</span> sysctl --system |
https://kubernetes.io/docs/tasks/tools/install-kubectl/
base repo
1 |
<span class="token function">cd</span> /etc/yum.repos.d <span class="token function">mv</span> CentOS-Base.repo CentOS-Base.repo.bak <span class="token function">mv</span> epel.repo epel.repo.bak <span class="token function">curl</span> https://mirrors.aliyun.com/repo/Centos-7.repo -o CentOS-Base.repo <span class="token function">sed</span> -i <span class="token string">'s/gpgcheck=1/gpgcheck=0/g'</span> /etc/yum.repos.d/CentOS-Base.repo <span class="token function">curl</span> https://mirrors.aliyun.com/repo/epel-7.repo -o epel.repo |
gpkcheck=0 表示对从这个源下载的rpm包不进行校验
docker repo
1 |
<span class="token function">cd</span> /etc/yum.repos.d <span class="token function">curl</span> http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o docker-ce.repo |
Kubernetes源
1 |
<span class="token function">cat</span> <span class="token operator"><<</span>EOF <span class="token operator">></span> /etc/yum.repos.d/kubernetes.repo <span class="token punctuation">[</span>kubernetes<span class="token punctuation">]</span> name<span class="token operator">=</span>Kubernetes baseurl<span class="token operator">=</span>https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled<span class="token operator">=</span>1 gpgcheck<span class="token operator">=</span>0 repo_gpgcheck<span class="token operator">=</span>0 gpgkey<span class="token operator">=</span>https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF |
gpkcheck=0 表示对从这个源下载的rpm包不进行校验
repo_gpgcheck:某些安全性配置文件会在 /etc/yum.conf 内全面启用 repo_gpgcheck,以便能检验软件库的中继数据的加密签署
update cache
1 |
yum clean all yum makecache yum repolist |
安装 docker
查看docker版本号,查看 是否安装
1 |
docker version |
1 |
yum list docker-ce --showduplicates <span class="token operator">|</span> <span class="token function">sort</span> -r |
1 |
docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable docker-ce.x86_64 3:19.03.1-3.el7 @docker-ce-stable docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable |
这里选择 19.03.1-3.el7
这个版本安装
1 |
yum <span class="token function">install</span> -y docker-ce |
启动 docker
1 |
systemctl <span class="token function">enable</span> docker --now 或 systemctl <span class="token function">enable</span> docker <span class="token operator">&&</span> systemctl start docker |
查看docker 版本
1 |
docker -v 或 docker version |
1 |
Docker version 19.03.3, build a872fc2f86 |
1 |
<span class="token function">mkdir</span> -p /etc/docker <span class="token function">tee</span> /etc/docker/daemon.json <span class="token operator"><<</span>-<span class="token string">'EOF'</span> <span class="token punctuation">{<!-- --></span> <span class="token string">"exec-opts"</span><span class="token keyword">:</span> <span class="token punctuation">[</span><span class="token string">"native.cgroupdriver=systemd"</span><span class="token punctuation">]</span>, <span class="token string">"log-driver"</span><span class="token keyword">:</span> <span class="token string">"json-file"</span>, <span class="token string">"log-opts"</span><span class="token keyword">:</span> <span class="token punctuation">{<!-- --></span> <span class="token string">"max-file"</span><span class="token keyword">:</span> <span class="token string">"3"</span>, <span class="token string">"max-size"</span><span class="token keyword">:</span> <span class="token string">"100m"</span> <span class="token punctuation">}</span>, <span class="token string">"storage-driver"</span><span class="token keyword">:</span> <span class="token string">"overlay2"</span>, <span class="token string">"storage-opts"</span><span class="token keyword">:</span> <span class="token punctuation">[</span> <span class="token string">"overlay2.override_kernel_check=true"</span> <span class="token punctuation">]</span>, <span class="token string">"registry-mirrors"</span><span class="token keyword">:</span> <span class="token punctuation">[</span><span class="token string">"https://7fsmy198.mirror.aliyuncs.com"</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> EOF systemctl daemon-reload systemctl restart docker |
注意:
native.cgroupdriver=systemd
官方推荐此配置,地址 https://kubernetes.io/docs/setup/production-environment/container-runtimes/
kubeadm不管kubelet和kubectl,所以我们需要手动安装kubelet和kubectl:
1 |
yum <span class="token function">install</span> -y kubeadm kubelet kubectl --disableexcludes<span class="token operator">=</span>kubernetes |
Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。
Kubectl是Kubernetes集群管理工具。
最后启动kubelet:
1 |
systemctl <span class="token function">enable</span> kubelet --now |
注:在master节点上进行如下操作
在安装过程中我们发现安装的是 1.16.2
版本
1 |
kubeadm version |
1 |
kubeadm version: <span class="token operator">&</span>version.Info<span class="token punctuation">{<!-- --></span>Major:<span class="token string">"1"</span>, Minor:<span class="token string">"16"</span>, GitVersion:<span class="token string">"v1.16.2"</span>, GitCommit:<span class="token string">"c97fe5036ef3df2967d086711e6c0c405941e14b"</span>, GitTreeState:<span class="token string">"clean"</span>, BuildDate:<span class="token string">"2019-10-15T19:15:39Z"</span>, GoVersion:<span class="token string">"go1.12.10"</span>, Compiler:<span class="token string">"gc"</span>, Platform:<span class="token string">"linux/amd64"</span><span class="token punctuation">}</span> |
镜像下载
执行 kubeadm config images list
命令就会输出如下所需版本
1 |
k8s.gcr.io/kube-apiserver:v1.16.2 k8s.gcr.io/kube-controller-manager:v1.16.2 k8s.gcr.io/kube-scheduler:v1.16.2 k8s.gcr.io/kube-proxy:v1.16.2 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.3.15-0 k8s.gcr.io/coredns:1.6.2 |
在master进行Kubernetes集群初始化
1 |
kubeadm init --kubernetes-version<span class="token operator">=</span>1.16.2 \ --apiserver-advertise-address<span class="token operator">=</span>192.168.0.254 \ --image-repository<span class="token operator">=</span>registry.aliyuncs.com/google_containers \ --service-cidr<span class="token operator">=</span>10.1.0.0/16 \ --pod-network-cidr<span class="token operator">=</span>10.244.0.0/16 |
这一步很关键,由于kubeadm
默认从官网k8s.grc.io
下载所需镜像,国内无法
访问,因此需要通过–image-repository
指定阿里云镜像仓库
地址
集群初始化成功后返回如下信息:
记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。
1 |
Your Kubernetes control-plane has initialized successfully<span class="token operator">!</span> To start using your cluster, you need to run the following as a regular user: <span class="token function">mkdir</span> -p <span class="token variable">$HOME</span>/.kube <span class="token function">sudo</span> <span class="token function">cp</span> -i /etc/kubernetes/admin.conf <span class="token variable">$HOME</span>/.kube/config <span class="token function">sudo</span> <span class="token function">chown</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">id</span> -u<span class="token variable">)</span></span><span class="token keyword">:</span><span class="token variable"><span class="token variable">$(</span><span class="token function">id</span> -g<span class="token variable">)</span></span> <span class="token variable">$HOME</span>/.kube/config You should now deploy a pod network to the cluster. Run <span class="token string">"kubectl apply -f [podnetwork].yaml"</span> with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can <span class="token function">join</span> any number of worker nodes by running the following on each as root: kubeadm <span class="token function">join</span> 192.168.0.254:6443 --token kehvmq.e33d33lgkrm8h0rn \ --discovery-token-ca-cert-hash sha256:6150e7960c44890d5dd6b160bbbb4bfa256023db22f004b54d27e1cca72b0afc |
根据以上结果,还要操作一些任务
只有 Kubernetes集群初始化 完成后才能修改端口范围
默认端口范围:30000-32767
如果只使用这些,那么不用修改
1 |
<span class="token function">mkdir</span> -p <span class="token variable">$HOME</span>/.kube <span class="token function">sudo</span> <span class="token function">cp</span> -i /etc/kubernetes/admin.conf <span class="token variable">$HOME</span>/.kube/config <span class="token function">sudo</span> <span class="token function">chown</span> <span class="token variable"><span class="token variable">$(</span><span class="token function">id</span> -u<span class="token variable">)</span></span><span class="token keyword">:</span><span class="token variable"><span class="token variable">$(</span><span class="token function">id</span> -g<span class="token variable">)</span></span> <span class="token variable">$HOME</span>/.kube/config |
来源
https://github.com/coreos/flannel
1 |
<span class="token function">cd</span> ~ <span class="token function">wget</span> https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -O kube-flannel.yml 或 <span class="token function">wget</span> https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml -O kube-flannel.yml kubectl apply -f kube-flannel.yml |
注意: 如果上面自定义了pod ip [
--pod-network-cidr=10.244.0.0/16
] 范围,这里需要修改·kube-flannel.ym·l的net-conf.json
, 把10.244.0.0
修改为 你改动的范围。
1 |
kubectl get nodes |
1 |
NAME STATUS ROLES AGE VERSION foxk8s Ready master 12m v1.15.3 |
如果你的环境迟迟都是NotReady状态,可以kubectl get pod -A
看一下pod状态,一般可以发现问题,比如flannel的镜像下载失败啦~
当node Ready的时候,我们可以看到pod也全部ready了:
1 |
kubectl get cs |
1 |
NAME AGE controller-manager <span class="token operator"><</span>unknown<span class="token operator">></span> scheduler <span class="token operator"><</span>unknown<span class="token operator">></span> etcd-0 <span class="token operator"><</span>unknown<span class="token operator">></span> |
在master节点输入命令检查集群状态,返回如下结果则集群状态正常
1 |
kubectl get nodes |
1 |
NAME STATUS ROLES AGE VERSION foxk8s Ready master 21m v1.15.3 |
重点查看STATUS内容为Ready时,则说明集群状态正常。
创建Pod以验证集群是否正常。
1 |
kubectl create deployment nginx --image<span class="token operator">=</span>nginx kubectl expose deployment nginx --port<span class="token operator">=</span>80 --type<span class="token operator">=</span>NodePort kubectl get pod,svc |
如果是单机版请看后面的最后配置 单机版 k8s
配置
1 |
kubectl delete pod nginx kubectl delete svc nginx |
1 |
systemctl <span class="token function">enable</span> kubelet systemctl start kubelet |
在master节点上进行如下操作
拉取镜像
1 |
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 |
创建Dashboard的yaml文件
1 |
<span class="token function">wget</span> https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml -O kubernetes-dashboard.yaml <span class="token function">sed</span> -i <span class="token string">"160a \ \ \ \ \ \ nodePort: 30001"</span> kubernetes-dashboard.yaml <span class="token function">sed</span> -i <span class="token string">"161a \ \ type:\ NodePort"</span> kubernetes-dashboard.yaml |
备注
s/k8s.gcr.io/loveone/g
因为墙,所以要更改能访问的
160a \ \ \ \ \ \ nodePort: 30001
增加外部访问端口
161a \ \ type:\ NodePort
增加可外部访问
150行到164行代码如下
1 |
<span class="token key atrule">kind</span><span class="token punctuation">:</span> Service <span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> v1 <span class="token key atrule">metadata</span><span class="token punctuation">:</span> <span class="token key atrule">labels</span><span class="token punctuation">:</span> <span class="token key atrule">k8s-app</span><span class="token punctuation">:</span> kubernetes<span class="token punctuation">-</span>dashboard <span class="token key atrule">name</span><span class="token punctuation">:</span> kubernetes<span class="token punctuation">-</span>dashboard <span class="token key atrule">namespace</span><span class="token punctuation">:</span> kube<span class="token punctuation">-</span>system <span class="token key atrule">spec</span><span class="token punctuation">:</span> <span class="token key atrule">ports</span><span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token key atrule">port</span><span class="token punctuation">:</span> <span class="token number">443</span> <span class="token key atrule">targetPort</span><span class="token punctuation">:</span> <span class="token number">8443</span> <span class="token key atrule">nodePort</span><span class="token punctuation">:</span> <span class="token number">30001</span> <span class="token key atrule">type</span><span class="token punctuation">:</span> NodePort <span class="token key atrule">selector</span><span class="token punctuation">:</span> <span class="token key atrule">k8s-app</span><span class="token punctuation">:</span> kubernetes<span class="token punctuation">-</span>dashboard |
部署 Dashboard
1 |
kubectl create -f kubernetes-dashboard.yaml |
如果你部署错误了,那么可以删除 重新来过 kubectl delete -f kubernetes-dashboard.yaml
创建完成后,检查相关服务运行状态
1 |
kubectl get deployment kubernetes-dashboard -n kube-system kubectl get pods -n kube-system -o wide kubectl get services -n kube-system ss -ntlp<span class="token operator">|</span><span class="token function">grep</span> 30001 |
浏览器访问
浏览器输入Dashboard访问地址:
1 |
https://192.168.0.254:30001 |
访问成功后,是要选择令牌的,填入 令牌 token
才能进入。令牌怎么来,看如下获取
查看设置访问Dashboard的认证令牌
创建 serviceaccount
1 |
kubectl create serviceaccount dashboard-admin -n kube-system |
绑定 权限
1 |
kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole<span class="token operator">=</span>cluster-admin --serviceaccount<span class="token operator">=</span>kube-system:dashboard-admin |
获取令牌
1 |
kubectl describe secrets \ -n kube-system <span class="token variable"><span class="token variable">$(</span>kubectl -n kube-system get secret <span class="token operator">|</span> <span class="token function">awk</span> <span class="token string">'/admin/{print <span class="token variable">$1</span>}'</span><span class="token variable">)</span></span> |
输出如下,
1 |
<span class="token operator">==</span><span class="token operator">==</span> priv: 1679 bytes pub: 459 bytes Name: kubernetes-dashboard-token-lhs57 Namespace: kube-system Labels: <span class="token operator"><</span>none<span class="token operator">></span> Annotations: kubernetes.io/service-account.name: kubernetes-dashboard kubernetes.io/service-account.uid: 0c9e6220-8d8f-11e9-8c09-4cedfbc99721 Type: kubernetes.io/service-account-token Data <span class="token operator">==</span><span class="token operator">==</span> ca.crt: 1025 bytes namespace: 11 bytes token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1saHM1NyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjBjOWU2MjIwLThkOGYtMTFlOS04YzA5LTRjZWRmYmM5OTcyMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.aQbqiVwqZvAIXuHSD72SNSqVSp55nkhy3YP_x_zV3ZMYQPW5geg_uH6OzCI11D5Iu_WJdFTl0rl9t12NfUkZWDiv9ghzoP-pDpJtKeEWZAq3pb_cLFyUmVcUsjuw7BNf0RUowBM3ukfYLHhwhNROjf-W6RAPj1Kp0O9xsMghDjMHZyASutz3XnmZvTrkDKvs-vTg-aSk9Jv6jt3Kat35_ufGVf80CJbhbPzd7CvaLS_03olv0veueup95Qm6mo5Mai1lYbaKeYGpC0hwi8aEpqZafni6MsxJWZt0sXZJiiclqJ7GoN9FRv1EXXGQ1Vcea6Ks7VQpDuz4woNhJdPppQ |
要找到 kubernetes-dashboard的令牌token:
后面内容 就是需要的数据。
使用输出的token登录Dashboard
在浏览器中 选择令牌
,把令牌 填入,点击登录,认证通过后,登录Dashboard首页
默认 Master Node不参与工作负载,所以 要配置让Master
工作,请安如下2步操作
1 |
kubectl describe node foxk8s <span class="token operator">|</span> <span class="token function">grep</span> Taints 或 kubectl describe node -A <span class="token operator">|</span> <span class="token function">grep</span> Taints |
1 |
Taints: node-role.kubernetes.io/master:NoSchedule |
去掉 taint , 这样 单机 k8s 就能部署各种东东了
1 |
kubectl taint nodes --all node-role.kubernetes.io/master- 或 kubectl taint nodes foxk8s node-role.kubernetes.io/master- |
1 |
kubectl describe node foxk8s <span class="token operator">|</span> <span class="token function">grep</span> Taints 或 kubectl describe node -A <span class="token operator">|</span> <span class="token function">grep</span> Taints |
1 |
Taints: <span class="token operator"><</span>none<span class="token operator">></span> |
https://blog.csdn.net/fenglailea/article/details/91873346
重置 kubeadm init
如果kubeadm init
命令后发现配置错误,重新更改怎么办,那么使用kubeadm reset
命令重置
pod 不成功,STATUS 状态一直是 Pending
1 |
kubectl get pod --namespace<span class="token operator">=</span>kube-system 或 kubectl get pod -A |
1 |
NAME READY STATUS RESTARTS AGE coredns-8686dcc4fd-7mhvr 1/1 Running 0 88m coredns-8686dcc4fd-xwgft 1/1 Running 0 88m etcd-afmserver 1/1 Running 0 88m kube-apiserver-afmserver 1/1 Running 0 87m kube-controller-manager-afmserver 1/1 Running 0 87m kube-flannel-ds-amd64-nkj9m 1/1 Running 0 87m kube-proxy-cskfx 1/1 Running 0 88m kube-scheduler-afmserver 1/1 Running 0 88m kubernetes-dashboard-76f6bf8c57-dqfxm 1/1 Running 0 13m |
这里假设
:kubernetes-dashboard-76f6bf8c57-dqfx
STATUS 状态 Pending
,那么用如下查看
1 |
kubectl describe pod kubernetes-dashboard-76f6bf8c57-dqfx --namespace<span class="token operator">=</span>kube-system |
就会输出 错误日志
信息
1 |
kubectl get pod |
1 |
NAME READY STATUS RESTARTS AGE nginx-65f88748fd-x4ppv 0/1 Pending 0 50m |
1 |
kubectl describe pod nginx-65f88748fd-x4ppv |
就会输出 错误日志
信息
1 |
<span class="token punctuation">..</span><span class="token punctuation">..</span> <span class="token punctuation">..</span><span class="token punctuation">..</span> <span class="token punctuation">..</span><span class="token punctuation">..</span> Node-Selectors: <span class="token operator"><</span>none<span class="token operator">></span> Tolerations: node.kubernetes.io/not-ready:NoExecute <span class="token keyword">for</span> 300s node.kubernetes.io/unreachable:NoExecute <span class="token keyword">for</span> 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 6s <span class="token punctuation">(</span>x39 over 50m<span class="token punctuation">)</span> default-scheduler 0/1 nodes are available: 1 node<span class="token punctuation">(</span>s<span class="token punctuation">)</span> had taints that the pod didn't tolerate. |
The Service “redis” is invalid: spec.ports[0].nodePort: Invalid value: 6379: provided port is not in the valid range. The range of valid ports is 30000-32767
修改kubernetes服务nodeport类型的端口范围
编辑 kube-apiserver.yaml 文件
1 |
vim /etc/kubernetes/manifests/kube-apiserver.yaml |
找到 --service-cluster-ip-range
这一行,在这一行的下一行增加 如下内容
1 |
- --service-node-port-range<span class="token operator">=</span>1-65535 |
实际 案例内容如
1 |
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: component: kube-apiserver tier: control-plane name: kube-apiserver namespace: kube-system spec: containers: - command: - kube-apiserver - --advertise-address=192.168.0.254 - --allow-privileged=true - --authorization-mode=Node,RBAC - --client-ca-file=/etc/kubernetes/pki/ca.crt - --enable-admission-plugins=NodeRestriction - --enable-bootstrap-token-auth=true - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key - --etcd-servers=https://127.0.0.1:2379 - --insecure-port=0 - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key - --requestheader-allowed-names=front-proxy-client - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt - --requestheader-extra-headers-prefix=X-Remote-Extra- - --requestheader-group-headers=X-Remote-Group - --requestheader-username-headers=X-Remote-User - --secure-port=6443 - --service-account-key-file=/etc/kubernetes/pki/sa.pub - --service-cluster-ip-range=10.1.0.0/16 - --service-node-port-range=1-65535 |
最后 重启 kubelet
1 |
systemctl daemon-reload systemctl restart kubelet |
Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
去掉配置文件中的 --network-plugin=cni
就可以了
1 |
vim /lib/systemd/system/kubelet.service.d/10-kubeadm.conf |
通过编辑配置文件发现/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
,并没有此配置,找到 EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
参数,编辑这个文件 /var/lib/kubelet/kubeadm-flags.env
,发现 --network-plugin=cni
配置信息在这个配置文件中,修改注释掉即可
原
1 |
KUBELET_KUBEADM_ARGS<span class="token operator">=</span><span class="token string">"--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.1"</span> |
修改为
1 |
KUBELET_KUBEADM_ARGS<span class="token operator">=</span><span class="token string">"--cgroup-driver=systemd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.1"</span> |
重新加载配置,和重启 kubelet
1 |
systemctl daemon-reload systemctl restart kubelet |
要把 slave 机器加入到 集群中,先要获取master
中的几个相关信息 token
--discovery-token-ca-cert-hash
master的IP和端口
环境说明
slave 的IP 为 192.168.0.252
slave 主机名 为 kub-slave
所有机器配置一样,预装环境一样
master
机上执行
在master
机上执行
1 |
kubeadm token list |
1 |
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS |
在master
机上执行
1 |
kubeadm token create |
1 |
x1k2fe.h9nhgblav0qpjw63 |
在master
机上执行
1 |
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt <span class="token operator">|</span> openssl rsa -pubin -outform der 2<span class="token operator">></span>/dev/null <span class="token operator">|</span> openssl dgst -sha256 -hex <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/^.* //'</span> |
1 |
286ce2032d6edad0b164fb36c1ab70d82c67a141171e4e931955831655925ffc |
宿主机IP
:宿主机端口
,这里对应得是 192.168.0.2546443
slave 配置
先设置 hosts
1 |
<span class="token function">cat</span> <span class="token operator"><<</span>EOF <span class="token operator">>></span>/etc/hosts 192.168.0.254 foxk8s EOF |
在 slave 机器上 执行 格式
1 |
kubeadm <span class="token function">join</span> --token <span class="token operator"><</span>token<span class="token operator">></span> <span class="token operator"><</span>master-ip<span class="token operator">></span>:<span class="token operator"><</span>master-port<span class="token operator">></span> --discovery-token-ca-cert-hash sha256:<span class="token operator"><</span>hash<span class="token operator">></span> |
<master-ip>:<master-port>
宿主机IP
:宿主机端口
,这里对应得是 192.168.0.254:6443
token
1天左右的时间就过期
--discovery-token-ca-cert-hash
获取ca证书sha256编码hash值
在上面中 几个关键信息已经获取到了,那么最后的整合信息如下
1 |
kubeadm <span class="token function">join</span> 192.168.0.254:6443 \ --token x1k2fe.h9nhgblav0qpjw63 \ --discovery-token-ca-cert-hash sha256:286ce2032d6edad0b164fb36c1ab70d82c67a141171e4e931955831655925ffc |
slave节点需要等它下载好里面pod后,才会变成Ready状态
查看 子节点状态
在 master 上执行
1 |
kubectl get nodes |
1 |
NAME STATUS ROLES AGE VERSION fox8s Ready master 41m v1.15.3 kub-slave NotReady <span class="token operator"><</span>none<span class="token operator">></span> 15m v1.15.3 |
删除子节点
在 master 上执行
1 |
kubectl drain foxk8s --delete-local-data --force --ignore-daemonsets kubectl delete node foxk8s |
在 slave 上执行
1 |
kubeadm reset ifconfig cni0 down ip link delete cni0 ifconfig flannel.1 down ip link delete flannel.1 rm -rf /var/lib/cni/ rm -rf /var/lib/etcd/* |
来源:
https://www.kubernetes.org.cn/5462.html
http://hutao.tech/k8s-source-code-analysis/prepare/debug-environment.html
https://blog.csdn.net/qq1083062043/article/details/84949924
https://cloud.tencent.com/developer/article/1487532
https://www.kubernetes.org.cn/5551.html
https://blog.csdn.net/mailjoin/article/details/79686934