Kubernetes 二进制添加Node节点

104 篇文章 131 订阅

本次环境这里添加了一个k8s-05 ip为192.168.0.14的新node节点,添加多个node节点的步骤和方式相同,这里不一一举例

没有特殊说明的都在k8s-01上进行操作

首先我们需要修改host主机,添加k8s-05

 
  1. #在之前的master节点添加
  2. echo "192.168.0.14 k8s-05" >>/etc/hosts
  3. #在k8s-05操作
  4. cat >>/etc/hosts<<EOF
  5. 192.168.0.10 k8s-01
  6. 192.168.0.11 k8s-02
  7. 192.168.0.12 k8s-03
  8. 192.168.0.13 k8s-04
  9. EOF

检查host解析

 
  1. [root@k8s-01 ~]# ping -c 1 k8s-05
  2. PING k8s-05 (192.168.0.14) 56(84) bytes of data.
  3. 64 bytes from k8s-05 (192.168.0.14): icmp_seq=1 ttl=64 time=0.910 ms
  4. --- k8s-05 ping statistics ---
  5. 1 packets transmitted, 1 received, 0% packet loss, time 0ms
  6. rtt min/avg/max/mdev = 0.910/0.910/0.910/0.000 ms

分发秘钥

 
  1. cd
  2. ssh-copy-id -i ~/.ssh/id_rsa.pub k8s-05
  3. #为了后面拷贝证书等文件方便快捷,这里继续分发秘钥

在k8s-05节点创建K8s相关目录

 
  1. mkdir -p /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert

推送CA证书

 
  1. cd /etc/kubernetes/cert
  2. scp ca.pem ca-config.json k8s-05:/etc/kubernetes/cert/

flanneld部署

 
  1. cd /opt/k8s/work/flannel
  2. scp flanneld mk-docker-opts.sh k8s-05:/opt/k8s/bin/

拷贝flanneld密钥

 
  1. ssh k8s-05 "mkdir -p /etc/flanneld/cert"
  2. scp /etc/flanneld/cert/flanneld*.pem k8s-05:/etc/flanneld/cert

拷贝flannel启动文件

 
  1. scp /etc/systemd/system/flanneld.service k8s-05:/etc/systemd/system/
  2. #启动flannel
  3. ssh k8s-05 "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"
  4. #检查是否启动成功
  5. ssh k8s-05 "systemctl status flanneld|grep Active"

查看etcd网络数据

新增flannel会注册到etcd

 
  1. source /opt/k8s/bin/environment.sh
  2. etcdctl \
  3. --endpoints=${ETCD_ENDPOINTS} \
  4. --ca-file=/etc/kubernetes/cert/ca.pem \
  5. --cert-file=/etc/flanneld/cert/flanneld.pem \
  6. --key-file=/etc/flanneld/cert/flanneld-key.pem \
  7. ls ${FLANNEL_ETCD_PREFIX}/subnets

正常结果如下

image_1e12n9sd91d1v8c18rj1dl11jqr9.png-197.9kB

上面的步骤结束后我们flannel网络就设置完毕


Kubernetes Node 节点安装Docker

这里我们直接在k8s-05节点安装docker

 
  1. yum install -y yum-utils device-mapper-persistent-data lvm2
  2. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget
  4. yum makecache fast
  5. yum -y install docker-ce

创建配置文件

 
  1. mkdir -p /etc/docker/
  2. cat > /etc/docker/daemon.json <<EOF
  3. {
  4. "exec-opts": ["native.cgroupdriver=systemd"],
  5. "registry-mirrors": ["https://hjvrgh7a.mirror.aliyuncs.com"],
  6. "log-driver": "json-file",
  7. "log-opts": {
  8. "max-size": "100m"
  9. },
  10. "storage-driver": "overlay2"
  11. }
  12. EOF

修改配置文件

 
  1. vim /usr/lib/systemd/system/docker.service

image_1e12nfvlu1lcc139m1sj167l1ufkm.png-182.8kB

在配置文件14行删除原来并添加下面的参数

 
  1. EnvironmentFile=-/run/flannel/docker
  2. ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock

启动docker并检查服务状态

 
  1. systemctl daemon-reload && systemctl enable docker && systemctl restart docker
  2. systemctl status docker|grep Active

查看docke0网桥是否正常

 
  1. [root@k8s-05 ~]# ip addr show flannel.1 && /usr/sbin/ip addr show docker0
  2. 3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
  3. link/ether 1a:c7:47:3a:f5:4e brd ff:ff:ff:ff:ff:ff
  4. inet 172.30.64.0/32 scope global flannel.1
  5. valid_lft forever preferred_lft forever
  6. inet6 fe80::18c7:47ff:fe3a:f54e/64 scope link
  7. valid_lft forever preferred_lft forever
  8. 4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
  9. link/ether 02:42:99:c3:03:9d brd ff:ff:ff:ff:ff:ff
  10. inet 172.30.64.1/21 brd 172.30.71.255 scope global docker0
  11. valid_lft forever preferred_lft forever

安装kubelet

创建kubelet bootstrap kubeconfig文件

 
  1. #k8s-01操作
  2. cd /opt/k8s/work
  3. export BOOTSTRAP_TOKEN=$(kubeadm token create \
  4. --description kubelet-bootstrap-token \
  5. --groups system:bootstrappers:k8s-05 \
  6. --kubeconfig ~/.kube/config)
  7. # 设置集群参数
  8. kubectl config set-cluster kubernetes \
  9. --certificate-authority=/etc/kubernetes/cert/ca.pem \
  10. --embed-certs=true \
  11. --server=https://192.168.0.100:8443 \
  12. --kubeconfig=kubelet-bootstrap-k8s-05.kubeconfig
  13. # 设置客户端认证参数
  14. kubectl config set-credentials kubelet-bootstrap \
  15. --token=${BOOTSTRAP_TOKEN} \
  16. --kubeconfig=kubelet-bootstrap-k8s-05.kubeconfig
  17. # 设置上下文参数
  18. kubectl config set-context default \
  19. --cluster=kubernetes \
  20. --user=kubelet-bootstrap \
  21. --kubeconfig=kubelet-bootstrap-k8s-05.kubeconfig
  22. # 设置默认上下文
  23. kubectl config use-context default --kubeconfig=kubelet-bootstrap-k8s-05.kubeconfig

分发kubeconfig

 
  1. cd /opt/k8s/work
  2. scp kubelet-bootstrap-k8s-05.kubeconfig k8s-05:/etc/kubernetes/kubelet-bootstrap.kubeconfig

查看kubeadm为各个节点创建的token

 
  1. $ kubeadm token list --kubeconfig ~/.kube/config
  2. TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
  3. 2bd2l8.48aqiyi70ilmyapd 23h 2020-02-15T15:18:04-05:00 authentication,signing kubelet-bootstrap-token system:bootstrappers:k8s-03
  4. 2juok7.m3ovzxlplynkidg2 23h 2020-02-15T15:18:04-05:00 authentication,signing kubelet-bootstrap-token system:bootstrappers:k8s-02
  5. 4tco8p.fnzj1yfvsx5hkf2e 23h 2020-02-15T15:18:05-05:00 authentication,signing kubelet-bootstrap-token system:bootstrappers:k8s-04
  6. 8kw20m.ehj3git0b2e1bwkc 23h 2020-02-15T15:17:56-05:00 authentication,signing kubelet-bootstrap-token system:bootstrappers:k8s-01
  7. j1olh5.qzktcctz5kcaywqk 23h 2020-02-15T16:02:01-05:00 authentication,signing kubelet-bootstrap-token system:bootstrappers:k8s-05
  8. kktiu3.3a1adkatjo4zjuqh 23h 2020-02-15T15:17:57-05:00 authentication,signing kubelet-bootstrap-token system:bootstrappers:k8s-02
  9. nzkb4r.g63nm9qqbq2e474q 23h 2020-02-15T15:18:04-05:00 authentication,signing kubelet-bootstrap-token system:bootstrappers:k8s-01
  10. #目前这里我们已经可以看到K8s-05节点的信息

查看各token关联的Secret

 
  1. $ kubectl get secrets -n kube-system|grep bootstrap-token
  2. bootstrap-token-2bd2l8 bootstrap.kubernetes.io/token 7 47m
  3. bootstrap-token-2juok7 bootstrap.kubernetes.io/token 7 47m
  4. bootstrap-token-4tco8p bootstrap.kubernetes.io/token 7 47m
  5. bootstrap-token-8kw20m bootstrap.kubernetes.io/token 7 47m
  6. bootstrap-token-j1olh5 bootstrap.kubernetes.io/token 7 3m29s
  7. bootstrap-token-kktiu3 bootstrap.kubernetes.io/token 7 47m
  8. bootstrap-token-nzkb4r bootstrap.kubernetes.io/token 7 47m
  9. #可以看到已经有一个新建的

创建和分发kubelet参数配置

 
  1. cd /opt/k8s/work
  2. sed -e "s/##NODE_IP##/192.168.0.14/" kubelet-config.yaml.template > kubelet-config-192.168.0.14.yaml.template
  3. scp kubelet-config-192.168.0.14.yaml.template root@k8s-05:/etc/kubernetes/kubelet-config.yaml

拷贝kubelet启动文件

 
  1. cd /opt/k8s/work
  2. source /opt/k8s/bin/environment.sh
  3. sed -e "s/##NODE_NAME##/k8s-05/" kubelet.service.template > kubelet-k8s-05.service
  4. scp kubelet-k8s-05.service root@k8s-05:/etc/systemd/system/kubelet.service

拷贝kubelet命令

 
  1. scp /opt/k8s/bin/kubelet k8s-05:/opt/k8s/bin/

启动kubelet

 
  1. cd /opt/k8s/work
  2. source /opt/k8s/bin/environment.sh
  3. ssh root@k8s-05 "mkdir -p ${K8S_DIR}/kubelet/kubelet-plugins/volume/exec/"
  4. ssh root@k8s-05 "/usr/sbin/swapoff -a"
  5. ssh root@k8s-05 "systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet"

手动approve server cert csr

稍等片刻后,需要手动通过证书请求

基于安全考虑,CSR approving controllers不会自动approve kubelet server证书签名请求,需要手动approve

 
  1. kubectl get csr | grep Pending | awk '{print $1}' | xargs kubectl certificate approve

当我们再次查看节点

 
  1. [root@k8s-01 work]# kubectl get node
  2. NAME STATUS ROLES AGE VERSION
  3. k8s-01 Ready 57m v1.14.2
  4. k8s-02 Ready 57m v1.14.2
  5. k8s-03 Ready 57m v1.14.2
  6. k8s-04 Ready 57m v1.14.2
  7. k8s-05 Ready 51s v1.14.2

安装kube-proxy

此处均在 node01 上执行

推送kube-proxy二进制启动文件

 
  1. cd /opt/k8s/work/
  2. scp kubernetes/server/bin/kube-proxy k8s-05:/opt/k8s/bin/

分发kubeconfig文件

 
  1. cd /opt/k8s/work/
  2. scp kube-proxy.kubeconfig root@k8s-05:/etc/kubernetes/

分发和创建kube-proxy配置文件

 
  1. cd /opt/k8s/work/
  2. sed -e "s/##NODE_NAME##/k8s-05/" -e "s/##NODE_IP##/10.0.20.15/" kube-proxy-config.yaml.template > kube-proxy-config-k8s-05.yaml.template
  3. scp kube-proxy-config-k8s-05.yaml.template root@k8s-05:/etc/kubernetes/kube-proxy-config.yaml

分发kube-proxy systemd unit文件

 
  1. scp kube-proxy.service root@k8s-05:/etc/systemd/system/

启动kube-proxy服务

 
  1. cd /opt/k8s/work
  2. source /opt/k8s/bin/environment.sh
  3. ssh root@k8s-05 "mkdir -p ${K8S_DIR}/kube-proxy"
  4. ssh root@k8s-05 "modprobe ip_vs_rr"
  5. ssh root@k8s-05 "systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy"

检查启动结果

 
  1. ssh root@k8s-05 "systemctl status kube-proxy|grep Active"
  2. ssh root@k8s-05 "netstat -lnpt|grep kube-prox"

检查ipvs路由规则

 
  1. ssh root@k8s-05 "/usr/sbin/ipvsadm -ln"

这里所有节点安装完毕,可以创建Pod进行测试

 
  1. cd /opt/k8s/work
  2. cat > nginx-ds.yml <<EOF
  3. apiVersion: v1
  4. kind: Service
  5. metadata:
  6. name: nginx-ds
  7. labels:
  8. app: nginx-ds
  9. spec:
  10. type: NodePort
  11. selector:
  12. app: nginx-ds
  13. ports:
  14. - name: http
  15. port: 80
  16. targetPort: 80
  17. ---
  18. apiVersion: extensions/v1beta1
  19. kind: DaemonSet
  20. metadata:
  21. name: nginx-ds
  22. labels:
  23. addonmanager.kubernetes.io/mode: Reconcile
  24. spec:
  25. template:
  26. metadata:
  27. labels:
  28. app: nginx-ds
  29. spec:
  30. containers:
  31. - name: my-nginx
  32. image: daocloud.io/library/nginx:1.13.0-alpine
  33. ports:
  34. - containerPort: 80
  35. EOF
  36. kubectl apply -f /opt/k8s/work/nginx-ds.yml

检查结果

 
  1. kubectl get pod -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. busybox 1/1 Running 1 63m 172.30.88.4 k8s-01
  4. nginx-ds-25w2v 1/1 Running 0 65m 172.30.104.2 k8s-03
  5. nginx-ds-2b6mn 1/1 Running 0 65m 172.30.240.2 k8s-04
  6. nginx-ds-6rsm4 1/1 Running 0 12m 172.30.64.2 k8s-05
  7. nginx-ds-n58rv 1/1 Running 0 65m 172.30.88.2 k8s-01
  8. nginx-ds-zvnx2 1/1 Running 0 65m 172.30.184.2 k8s-02

Related posts:

  1. Kubernetes 1.14 二进制集群安装
  2. Kubenetes 1.13.5 集群二进制安装
  3. Kuerbernetes 1.11 集群二进制安装
  4. CentOS 7 ETCD集群配置大全

转载至https://i4t.com/4508.html?__cf_chl_jschl_tk__=pmd_3eea18243279db7905c67ccd1a24b0c63a826b6c-1627395006-0-gqNtZGzNAc2jcnBszQX6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、安装准备: 1.环境 主机名 IP k8s-master 192.168.250.111 k8s-node01 192.168.250.112 k8s-node02 192.168.250.116 2.设置主机名 hostnamectl --static set-hostname k8s-master hostnamectl --static set-hostname k8s-node01 hostnamectl --static set-hostname k8s-node02 3.关闭防火墙和selinux systemctl disable firewalld systemctl stop firewalld sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 执行完成后重启虚拟机。 4.在master机器上安装ansible 执行命令:sudo yum install ansible (离线处理补充) 5.配置 ansible ssh密钥登录,此操作需要在所有机器上执行 ssh-keygen -t rsa -b 2048 回车 回车 回车 ssh-copy-id $IP #$IP为所有虚拟机,按照提示输入yes 和root密码 (密钥补充) 二、安装kubernetes集群 进入ansible安装路径 : cd /etc/ansible 将路径下的roles文件夹和hosts文件删除。 解压压缩文件kubeasz.zip文件,将解压后的内容放入当前目录下(/etc/ansible) 根据搭建集群环境要求,进入/etc/ansible/example 目录下选取 hosts.allinone.example 单节点AllInOne hosts.m-masters.example 单主多节点 hosts.s-master.example 多主多节点 红色标记的是需要自行修改的地方 修改完成后将文件名改为hosts 放入/etc/ansible/目录下。 安装prepare ansible-playbook 01.prepare.yml 安装etcd ansible-playbook 02.etcd.yml 安装kubectl命令 ansible-playbook 03.kubectl.yml 安装docker ansible-playbook 04.docker.yml 如果执行时出现报错: 可忽略。 解决方法: 在master节点上执行:curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | jq '."results"[]["name"]' |sort 所有机器上执行: wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -ivh epel-release-latest-7.noarch.rpm yum install jq -y 在重新执行: ansible-playbook 04.docker.yml 安装calico ansible-playbook 05.calico.yml 部署master节点 ansible-playbook 06.kube-master.yml 加入node节点 ansible-playbook 07.kube-node.yml 如果执行成功,k8s集群就安装好了。 三、验证安装 如果提示kubectl: command not found,退出重新ssh登陆一下,环境变量生效即可 kubectl version #查看kubernetes版本 kubectl get componentstatus # 可以看到scheduler/controller-manager/etcd等组件 Healthy kubectl cluster-info # 可以看到kubernetes master(apiserver)组件 running kubectl get node # 可以看到单 node Ready状态 kubectl get pod --all-namespaces # 可以查看所有集群pod状态 kubectl get svc --all-namespaces # 可以查看所有集群服务状态 calicoctl node status # 可以在master或者node节点上查看calico网络状态 四、安装主要组件 安装kubedns kubectl create -f manifests/kubedns 安装heapster kubectl create -f manifests/heapster 安装dashboard kubectl create -f manifests/dashboard 访问dashboard 先执行命令查看dashboard的NodePort 端口 kubectl get svc -n kube-system 访问web页面 https://masterIP: 7443 选择令牌按钮 ,用命令查询登录令牌 之前安装过 heapster 执行命令:kubectl get secret -n kube-system 查询 heapster-token-twpw4 的详细内容 执行命令:kubectl describe secret heapster-token-twpw4 -n kube-system Token就是登录令牌,复制登录就好了 安装ingress kubectl create -f manifests/ingress/ 安装EFK(elasticsearch+ fluentd + kibana) 首先进入 manifests/EFK 文件夹下 (cd /etc/ansible/manifests/EFK) 查看并修改 ceph-sercet.yaml 文件。 此key值是 ceph存储用户的token值 ,将此key值转换为base64 将文件中红色选选中部分修改为转换后的值。 修改完成后 部署 pv 和 pvc 执行命令:kubectl create -f es-pv-data.yaml kubectl create -f es-pvc-data.yaml 部署fluentd 执行命令:kubectl create -f fluentd-rbac.yml -f fluentd-configmap.yml -f fluentd-daemonset.yml 部署elasticsearch 先设置node节点中role ,指定master client data 部署位置 执行命令:kubectl get nodes kubectl label node 10.2.0.244 role=master (10.2.0.244 是我本机kubernetes 的master节点 ,所以我也将此master也部署在这里) 其余的两个节点分别是data 和 client 执行命令:kubectl create -f es-discovery-svc.yaml -f es-svc.yaml -f es-master.yaml -f es-client.yaml -f es-data.yaml 其中部署elasticsearch集群需要注意一些事项 : Master节点一般只有一个 并且提供9300 端口 客户端通讯使用 Client 节点一般提供9200端口 用于连接kibana 和 fluentd http访问使用 Data 节点是提供数据存储,持久化对data节点进行就可以。 其中 master , client , data 部署文件中 配置的 CLUSTER_NAME 指的是 elasticsearch集群名称 Java运行自行设置,最大值和最小值需要一致。 最小为-Xms256m 部署kibana 执行命令:kubectl create -f kibana-svc.yaml -f kibana.yaml 这里需要注意 kibana.yaml 文件中 参数的设置 这里的CLUSTER_NAME 也是elasticsearch部署文件中设置的集群名称。 #安装 flannel 执行命令: cd /etc/ansible/roles/flannel 先修改kube-flannel.yml文件 --iface 对应的是本机的网卡名称 command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr", "--iface=eth1" ] 修改完成后 执行: kubectl create -f kube-flannel-rbac.yml kubectl apply -f kube-flannel.yml

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值