K8s集群搭建(整体流程记录)

经过一个星期的尝试,k8s 终于搭建完成。

目前网上关于k8s搭建的相关文档,大部分都一个样,互相copy。 其中坑也很多,但都没有在博客中提到。今天终于从坑中爬出来了,特此记录。

 

个人理解:

k8s 搭建 流程 : CentOs => utils依赖 => docker =>kubeadm, kubelet , kubectl  => master init  => 调配网络 => node join => ok

Web UI : 获取yaml => 修改 yaml => apply yaml => vi user_yaml => 获取 token => ok 

 

其中 ,我卡住的点依次如下:

     1.utils 依赖 安装完 不清楚哪些有用,哪些没用,版本差异等;

     2.docker 因为没看命令,把之前的image 清了,还好是私人测试环境 且有备份;

     3.kubeadm, kubelet , kubectl 安装完不会用

     4.master init     [ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists    [ERROR Port-10250]: Port 10250 is in use      (已在另一篇文章解释)

     5.调配网络 ,(已在另一篇文章解释)

     6. kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml  

        raw.githubusercontent.com  无法连接;

    7. 不清楚yaml 是干什么的 ;

    8.不清楚我按步骤安装,到底能不能用,问题卡在哪里 等等;

    9.dashboard 懵逼阶段。

总结:

      按照那些博客分享的流程安装,大致都没问题。关键点在于:

               1. init 时 , kubelet.conf already exists 或接口占用的,要先 kubeadm reset 重置, 把该删的删了

               2.调配网络时,无论flannel 还是 calico  : [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...  

                   因为网络问题可以多试几次(其实我第一次安装 timeout 后就放弃了calico ,拖了两天,重试一次竟然通了,玄学)  

              3.理解yaml 。我就是没怎么看理论知识,不知道yaml 干什么的,所以才一直卡在

                 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml   这一块

       yaml : k8s 的 yaml  角色   ,相当于 Docker 的 dockerfile。  k8s 通过 apply  指定的 yaml ,create  pod 。(docker 通过 Dockerfile 创建 image)。

       GitHub 推荐 kubectl apply -f https://raw.githubusercontent.com xxx。会因为外网网络问题 无法访问该网址及文件。

                    百度说: 去解析这个ip地址 然后添加到 /etc/hosts 上 reboot ,但并没有什么用。或

                                推荐安装各种网络插件,企图去访问Github上 这个日本ip,但并没有什么用 。

                   卡了两天,问题得到解决,简单粗暴:

                              https://github.com/kubernetes/dashboard  下载源码。 上传至master 服务器。解压。想要的文件  就在 

                                   kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml  中的  dashboard/v2.1.0/aio/deploy/recommended.yaml   路径下

                             不同版本路径可能不同,yaml 名字可能也不同 。        但根据官网提供的apply 路径,去找,就能找到。yaml 原理弄明白。 dashboard 就能安装上。

 

k8s 集群部署介绍:

3台Centos7,1个 master  2个 node   

k8s : v2.1.0

 

三台机器执行:

环境:hostname ,  ssh 免密,防火墙,linux 内核关闭 ,关闭 swap 等,

systemctl stop firewalld && systemctl disable firewalld

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config


swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab

iptables -F && iptables -X && iptables \
    -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT

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

 

1. utils 依赖

 

yum -y update
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp

2.docker 安装

    提示:若已安装乱了的,干脆直接docker 清掉 重新安装 

                     sudo yum remove docker docker latest docker-latest-logrotate \
                             docker-logrotate docker-engine docker-client docker-client-latest docker-common

              若有成熟的项目正在运行,注意不要把docker 干掉 或   rmi。



sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager \
    --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list | grep docker-ce

sudo yum makecache fast

sudo yum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io

sudo systemctl start docker && sudo systemctl enable docker

3.kubeadm, kubelet and kubectl

 

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubeadm kubelet kubectl
vi /etc/docker/daemon.json
{
	"exec-opts": ["native.cgroupdriver=systemd"]
}
 

systemctl restart docker 

sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" 
 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 


systemctl enable kubelet && systemctl start kubelet 

  找不到文件就自己创建一个,已存在就把之前的清了

 

拉取镜像:

kubeadm config images list
 
# ====================================================================================
k8s.gcr.io/kube-apiserver:v1.20.0
k8s.gcr.io/kube-controller-manager:v1.20.0
k8s.gcr.io/kube-scheduler:v1.20.0
k8s.gcr.io/kube-proxy:v1.20.0
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
# ====================================================================================

 

# 创建kubeadm.sh脚本,用于拉取镜像
	vi kubeadm.sh
# ====================================================================================
#!/bin/bash
set -e
KUBE_VERSION=v1.20.0
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.13-0
CORE_DNS_VERSION=1.7.0
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})
for imageName in ${images[@]} ; do
	docker pull $ALIYUN_URL/$imageName
	docker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageName
	docker rmi $ALIYUN_URL/$imageName
done
# ====================================================================================

 sh  脚本。 docker  images   ,查看  =>  Ok,公共资源搭建完毕。

 

搭建 Master,只在master 节点上执行:

 


kubeadm reset 
kubeadm init --kubernetes-version=1.20.0 \
    --apiserver-advertise-address= x.x.x.x  【即master ip】 \
    --pod-network-cidr=10.244.0.0/16 

会得到 : 

      kubeadm join x.x.x.x:6443 --token  xxxx   -discovery-token-ca-cert-hash sha256:1df02a

 这段话留着,一会有用。

 

mkdir -p $HOME/.kube
	sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
	sudo chown $(id -u):$(id -g) $HOME/.kube/config

即 /root/.kube/config 

  1. kubectl get pods -n kube-system 【查看kube-system的pods】

  2. kubectl get pods --all-namespaces 【查看所有pods】

 前两项为 Pending   ,问题不大,继续。

 

master 部署 calico :

       kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml

      kubectl get pods --all-namespaces -w

     # 这个可能会因为网络问题,卡顿, timeout  等,可以适当多重试几次,或按照 前面总结说的,直接去下载这个 yaml  上传到服务器, 自己 apply 

 

搭建 node, 执行 join  

         复制前面 init 的 join  信息 ,在 node 2  ,node 3 上执行。 

                        可能也会卡 Bootstrip , 多试几次

      kubectl get nodes 查看是否 Join  成功。

 

k8s 搭建完成

 

 

dashboard 搭建:

 

1. yaml   . 

         可以 wget,   或者直接 apply ,只要你能连得上 那个github ip 。

         反正我连不通,我选择了直接下载,然后上传,(前面总结提到的)

     vi recommended.yaml    看好 kind 名字  找到对应位置。

 

    kubectl create -f recommended.yaml 

 kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$'

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF

 

cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

curl  localhose:30443

   返回: Client  sent xxxx server

 

浏览器访问,https://master:30443,

不能正常访问dashboard页面的,前面注意 https  可能是证书问题

 

可以访问网页后:

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')


kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | sls admin-user | ForEach-Object { $_ -Split '\s+' } | Select -First 1)
Data
====
ca.crt:     1066 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXY1N253Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwMzAzMjQzYy00MDQwLTRhNTgtOGE0Ny04NDllZTliYTc5YzEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.Z2JrQlitASVwWbc-s6deLRFVk5DWD3P_vjUFXsqVSY10pbjFLG4njoZwh8p3tLxnX_VBsr7_6bwxhWSYChp9hwxznemD5x5HLtjb16kI9Z7yFWLtohzkTwuFbqmQaMoget_nYcQBUC5fDmBHRfFvNKePh_vSSb2h_aYXa8GV5AcfPQpY7r461itme1EXHQJqv-SN-zUnguDguCTjD80pFZ_CmnSE1z9QdMHPB8hoB4V68gtswR1VLa6mSYdgPwCHauuOobojALSaMc3RH7MmFUumAgguhqAkX3Omqd3rJbYOMRuMjhANqd08piDC3aIabINX6gP5-Tuuw2svnV6NYQ

 

token  填 浏览器 上 ,Ok 

部署完成。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值