首页 > 其他分享 >Kubernetes

Kubernetes

时间:2022-12-07 20:55:44浏览次数:49  
标签:kubectl Kubernetes kubernetes manifests etc kube flannel

Kubernete集群部署

1.大规模集群的注意事项

推荐阅读:
	https://kubernetes.io/zh/docs/setup/best-practices/cluster-large/

2.部署Kubernetes集群

2.1 宿主机与版本介绍

宿主机 k8s版本
centos7 1.19.9

2.2 K8S各节点环境准备

参考链接:
	https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
	
	1)临时关闭swap分区
swapoff -a && sysctl -w vm.swappiness=0
	2)基于配置文件关闭
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

  3)允许iptable检查桥接流量
cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system


	4)配置docker源,以便提供私有仓库
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum list docker-ce --showduplicates

	5)安装指定的docker版本
yum -y install docker-ce-18.09.9 docker-ce-cli-18.09.9
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion

	6)配置docker优化
mkdir -pv /etc/docker && cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "insecure-registries": ["k8s151.oldboyedu.com:5000"],     #指定master节点,这个5000端口是docker开放的registry的私有仓库
  "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
	
	7)配置docker开机自启动
systemctl enable --now docker
systemctl status docker


  8)禁用防火墙
systemctl disable --now firewalld


  9)禁用selinux
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 
grep ^SELINUX= /etc/selinux/config


  10)配置host解析
cat >> /etc/hosts <<'EOF'
     #添加域名解析 根据需要添加 master与worker 节点宿主机的域名
EOF
cat /etc/hosts


  11)在k8s151.oldboyedu.com节点启用docker registry的私有仓库
docker run -dp 5000:5000 --restart always --name oldboyedu-registry registry:2

3.所有节点安装kubeadm,kubelet,kubectl

(1)配置软件源
cat  > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF


(2)查看kubeadm的版本(将来你要安装的K8S时请所有组件版本均保持一致!)
yum -y list kubeadm --showduplicates | sort -r


(3)安装kubeadm,kubelet,kubectl软件包
yum -y install kubeadm-1.19.9-0 kubelet-1.19.9-0 kubectl-1.19.9-0 

(4)启动kubelet服务(若服务启动失败时正常现象,其会自动重启,因为缺失配置文件,初始化集群后恢复!此步骤可跳过!)
systemctl enable --now kubelet
systemctl status kubelet


#介绍软件包命令的使用场景
	kubeadm:
		用来初始化集群的指令。
	kubelet:
		在集群中的每个节点上用来启动Pod和容器等。
	kubectl:
		用来与集群通信的命令行工具。

kubeadm不能帮你安装或者管理kubelet或kubectl,所以你需要确保它们与通过kubeadm安装的控制平面(master)的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 

然而,控制平面与kubelet间的相差一个次要版本不一致是支持的,但kubelet的版本不可以超过"API SERVER"的版本。 例如,1.7.0版本的kubelet可以完全兼容1.8.0版本的"API SERVER",反之则不可以。


参考链接:
	https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/

4.初始化master节点

	(1)使用kubeadm初始化master节点
kubeadm init --kubernetes-version=v1.19.9 --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.244.0.0/16 --service-cidr=10.254.0.0/16

	(2)拷贝授权文件,用于管理K8S集群
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config	


	(3)查看集群节点
kubectl get cs
  结果显示 Healthy

5.配置所有worker节点加入k8s集群

(1)worker节点加入集群(如上图所示,下面的token及hash值需要根据您的集群环境而发生改变哟~)
kubeadm join 10.0.0.151:6443 --token pg399v.wxo32zunx09ekd6s \
    --discovery-token-ca-cert-hash sha256:3de653e36b5bbe3d34189607f4c11e63bcc675354dd2d47b81496ca96b68db60 
    
    
(2)查看集群现有的worker节点
kubectl get no
    结果显示NotReady

6.初始化网络组件

	官方的貌似有问题:(不推荐使用!)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-legacy.yml

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml


	有效的连接:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml


验证flannel插件是否部署成功:
kubectl get nodes
kubectl get pods -A -o wide | grep  flannel
			结果:显示worker工作节点都在runing



参考链接:
	https://kubernetes.io/zh/docs/concepts/cluster-administration/addons/
	https://github.com/flannel-io/flannel/blob/master/Documentation/kubernetes.md

7.添加自动补全功能

echo "source <(kubectl completion bash)" >> ~/.bashrc && source ~/.bashrc 

8.在安装过程中的报错

8.1 Unhealthy

[root@k8s154 ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS      MESSAGE                                                                                       ERROR
controller-manager   Unhealthy   Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused   
scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused   
etcd-0               Healthy     {"health":"true"}                                                                             

报错原因

是/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口是0导致的,解决方式是注释掉对应的port即可

[root@k8s154 /etc/kubernetes/manifests]# pwd
/etc/kubernetes/manifests
[root@k8s154 /etc/kubernetes/manifests]# cat -n  kube-controller-manager.yaml  | grep port
    27	    #- --port=0
    40	        port: 10257
    54	        port: 10257
[root@k8s154 /etc/kubernetes/manifests]# cat -n  kube-controller-manager.yaml  | grep port=0
    27	    #- --port=0
[root@k8s154 /etc/kubernetes/manifests]# cat -n  kube-scheduler.yaml  | grep port=0
    19	    #- --port=0
[root@k8s154 /etc/kubernetes/manifests]# 

#结果
[root@k8s154 /etc/kubernetes/manifests]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"} 

8.2 flannel

温馨提示: (所有的worker节点做此操作即可)
	问题引出: 
		"network: failed to find plugin "flannel" in path [/opt/cni/bin]]..."这样的报错。
	解决方案:
		wget https://github.com/containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz
		
		tar -xf cni-plugins-linux-amd64-v0.8.6.tgz ./flannel  # 只需要解压这一个文件即可。
		
		cp flannel /opt/cni/bin/

标签:kubectl,Kubernetes,kubernetes,manifests,etc,kube,flannel
From: https://www.cnblogs.com/zouyu7799/p/16964512.html

相关文章

  • 使用 NGINX 在 Kubernetes 中对 TCP 和 UDP 流量进行负载均衡
    原文作者:AmirRawdatofF5原文链接:​​​​使用NGINX在Kubernetes中对TCP和UDP流量进行负载均衡​​转载来源:NGINX官方网站除了HTTP流量之外,NGINXIngressCont......
  • 一、kubernetes介绍
    1、kubernetes基本介绍kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部......
  • Kubernetes configmap 笔记
    ConigMap什么是ConfigMapConfigMap采用key-value格式进行保存数据,一般用来保存非敏感数据,Pods可以将configmap作为环境变量、命令行参数或卷中的配置文件使用。Config......
  • Kubernetes静态Pod
    一、什么是StaticPod静态Pod在指定的节点上由kubelet守护进程直接管理,不需要API服务器监管。与由控制面管理的Pod(例如,Deployment、RC、DaemonSet)不同;kubelet......
  • Kubernetes(K8S) 监控 Prometheus + Grafana
    监控指标集群监控节点资源利用率节点数运行PodsPod监控容器指标应用程序Prometheus开源的监控、报警、数据库以HTTP协议周期性抓取被监控组件状态不需要......
  • kubernetes集群节点多网卡,calico/flannel组件如何指定网卡
    kubernetes集群节点多网卡,calico/flannel组件如何指定网卡1、calico如果有节点是多网卡,所以需要在deploy的env指定内网网卡  spec:containers:-env:-......
  • Kubernetes学习笔记(四十二):CKA已通过2022.12.04
    考试版本:1.25.2注意点:使用PSI内远程浏览器,可以多开tab,但不能导入书签,需要自己搜索,所以请熟悉完整命令和yaml格式考前请仔细阅读考试手册(预约考试页面有链接),特别是熟悉......
  • Kubernetes集群的Jenkins CI/CD版本上线流程部署
       最近在实习中接触了jenkins这个东西,所以花点时间了解了下。它可以在代码上传仓库(如github,gitee,gitlab)后,在jenkins(一个网站界面)中通过获取代码仓库中最新代码,进......
  • kubernetes CKA题库(附答案)
    第一题RBAC授权问题权重:4%设置配置环境:[student@node-1]$kubectlconfiguse-contextk8sContext为部署管道创建一个新的ClusterRole并将其绑定到范围为特定的name......
  • Kubernetes(K8S) helm chart
    感觉和放到一个yaml文件中,用----分隔,操作繁琐程度上,没有太大区别创建自定义Chart#创建自定义的chart名为mychart[root@k8smaster~]#helmcreatemychartCre......