前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS8 搭建Kubernetes

CentOS8 搭建Kubernetes

作者头像
小陈运维
发布2021-10-13 11:01:38
3660
发布2021-10-13 11:01:38
举报
文章被收录于专栏:小陈运维小陈运维

主机名

IP

组件

k8s-master

192.168.40.128/24

kubeadm、kubelet、kubectl、docker-ce

k8s-node1

192.168.40.129/24

kubeadm、kubelet、kubectl、docker-ce

k8s-node2

192.168.40.130/24

kubeadm、kubelet、kubectl、docker-ce

系统:CentOS8

配置:master:8核,4G  node1:8核  2G  node1:8核  2G

网络环境:IPv6、IPv4、VPN

网络环境有VPN下文部分资源使用了官方源

1.更新软件包

代码语言:javascript
复制
[root@localhost ~]# dnf update

2.三台机器安装Docker

代码语言:javascript
复制
[root@localhost ~]# vim /etc/hosts[root@localhost ~]# cat /etc/hosts127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4::1        localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.40.128       k8s-master master192.168.40.129       k8s-node1 node1192.168.40.130       k8s-node2 node2 [root@localhost ~]# dnf install yum-utilsdevice-mapper-persistent-data lvm2[root@localhost ~]# dnf remove docker \                 docker-client \                  docker-client-latest\                 docker-common \                 docker-latest \                 docker-latest-logrotate \                 docker-logrotate \                 docker-engine[root@localhost ~]# cd /etc/yum.repos.d/[root@localhost~]# wget https://download.docker.com/linux/centos/docker-ce.repo[root@localhost~]# dnf update[root@localhost~]# dnf install docker-ce –nobest

3.开机自启docker并启动

代码语言:javascript
复制
[root@localhost~]# systemctl enable docker[root@localhost~]# systemctl start docker[root@localhost~]# systemctl status docker●docker.service - Docker Application Container Engine   Loaded: loaded(/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)   Active: active (running) since Wed2019-12-18 10:25:46 EST; 6s ago     Docs: https://docs.docker.com Main PID: 73169 (dockerd)    Tasks: 32 (limit: 5935)   Memory: 105.9M   CGroup: /system.slice/docker.service           ├─73169 /usr/bin/dockerd           └─73180 docker-containerd --config/var/run/docker/containerd/containerd.toml

4.配置内核参数

代码语言:javascript
复制
[root@localhost~]# vim /etc/sysctl.d/k8s.conf [root@localhost~]# cat /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables= 1net.bridge.bridge-nf-call-iptables= 1net.ipv4.ip_nonlocal_bind= 1net.ipv4.ip_forward= 1vm.swappiness=0 [root@localhost~]# sysctl –system

5.添加必要内核模块

代码语言:javascript
复制
[root@localhost~]# vim /etc/sysconfig/modules/ipvs.modules[root@localhost~]# cat /etc/sysconfig/modules/ipvs.modules#!/bin/bashmodprobe-- ip_vsmodprobe-- ip_vs_rrmodprobe-- ip_vs_wrrmodprobe-- ip_vs_shmodprobe-- nf_conntrack_ipv4[root@localhost~]# chmod +x /etc/sysconfig/modules/ipvs.modules[root@localhost~]# ./etc/sysconfig/modules/ipvs.modules-bash:./etc/sysconfig/modules/ipvs.modules: 没有那个文件或目录[root@localhost~]# /etc/sysconfig/modules/ipvs.modules

6添加kubeadm的yum源

代码语言:javascript
复制
[root@localhost~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo>[kubernetes]>name=Kubernetes>baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64>enabled=1>gpgcheck=1>repo_gpgcheck=1>gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpghttps://packages.cloud.google.com/yum/doc/rpm-package-key.gpg>exclude=kube*> EOF

7.配置master节点

代码语言:javascript
复制
[root@localhost~]# cd /etc/yum.repos.d/[root@localhost~]# mv docker-ce.repo{,.back}[root@localhost~]# dnf update –nobest[root@localhost~]# dnf install ipvsadm[root@localhost~]# yum install -y kubelet kubeadm kubectl --disableexcludes=Kubernetes[root@localhost~]# systemctl enable kubelet && systemctl start kubelet [root@localhost~]# kubeadm config print init-defaults > kubeadm-init.yaml
代码语言:javascript
复制
[root@localhost~]# vim kubeadm-init.yaml[root@localhost~]# cat kubeadm-init.yamlapiVersion:kubeadm.k8s.io/v1beta2bootstrapTokens:-groups:  -system:bootstrappers:kubeadm:default-node-token  token: abcdef.0123456789abcdef  ttl: 24h0m0s  usages:  - signing  - authenticationkind:InitConfigurationlocalAPIEndpoint:  advertiseAddress: 1.2.3.4  bindPort: 6443nodeRegistration:  criSocket: /var/run/dockershim.sock  name: localhost.localdomain  taints:  - effect: NoSchedule    key: node-role.kubernetes.io/master---apiServer:  timeoutForControlPlane: 4m0sapiVersion:kubeadm.k8s.io/v1beta2certificatesDir:/etc/kubernetes/pkiclusterName:kubernetescontrollerManager:{}dns:  type: CoreDNSetcd:  local:    dataDir: /var/lib/etcdimageRepository:k8s.gcr.iokind:ClusterConfigurationkubernetesVersion:v1.17.0networking:  dnsDomain: cluster.local  serviceSubnet: 10.96.0.0/12scheduler:{}[root@localhost~]# vim kubeadm-init.yaml[root@localhost~]# cat kubeadm-init.yamlapiVersion:kubeadm.k8s.io/v1beta2bootstrapTokens:-groups:  -system:bootstrappers:kubeadm:default-node-token  token: abcdef.0123456789abcdef  ttl: 24h0m0s  usages:  - signing  - authenticationkind:InitConfigurationlocalAPIEndpoint:  advertiseAddress: 192.168.40.128  bindPort: 6443nodeRegistration:  criSocket: /var/run/dockershim.sock  name: localhost.localdomain  taints:  - effect: NoSchedule    key: node-role.kubernetes.io/master---apiServer:  timeoutForControlPlane: 4m0sapiVersion:kubeadm.k8s.io/v1beta2certificatesDir:/etc/kubernetes/pkiclusterName:kubernetescontrollerManager:{}dns:  type: CoreDNSetcd:  local:    dataDir: /var/lib/etcdimageRepository:k8s.gcr.iokind:ClusterConfigurationkubernetesVersion:v1.17.0networking:  dnsDomain: cluster.local  serviceSubnet: 10.96.0.0/12scheduler:{}---apiVersion:kubeproxy.config.k8s.io/v1alpha1kind:KubeProxyConfigurationmode:"ipvs"

8.拉取镜像

代码语言:javascript
复制
[root@localhost~]# kubeadm config images pull --config kubeadm-init.yamlW121810:48:44.641505   75319 validation.go:28]Cannot validate kube-proxy config - no validator is availableW121810:48:44.641691   75319 validation.go:28]Cannot validate kubelet config - no validator is available[config/images]Pulled k8s.gcr.io/kube-apiserver:v1.17.0[config/images]Pulled k8s.gcr.io/kube-controller-manager:v1.17.0[config/images]Pulled k8s.gcr.io/kube-scheduler:v1.17.0[config/images]Pulled k8s.gcr.io/kube-proxy:v1.17.0[config/images]Pulled k8s.gcr.io/pause:3.1[config/images]Pulled k8s.gcr.io/etcd:3.4.3-0[config/images]Pulled k8s.gcr.io/coredns:1.6.5 [root@localhost~]# docker image lsREPOSITORY                           TAG                 IMAGE ID            CREATED             SIZEk8s.gcr.io/kube-proxy                v1.17.0             7d54289267dc        10 days ago         116MBk8s.gcr.io/kube-apiserver            v1.17.0             0cae8d5cc64c        10 days ago         171MBk8s.gcr.io/kube-controller-manager   v1.17.0             5eb3b7486872        10 days ago         161MBk8s.gcr.io/kube-scheduler            v1.17.0             78c190f736b1        10 days ago         94.4MBk8s.gcr.io/coredns                   1.6.5               70f311871ae1        6 weeks ago         41.6MBk8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        7 weeks ago         288MBk8s.gcr.io/pause                    3.1                 da86e6ba6ca1        24 months ago       742kB

9.添加开机自启并启动kublet

代码语言:javascript
复制
[root@localhost~]# systemctl enable kubelet[root@localhost~]# systemctl start kubeletKubelet无法启动可能是您的交换分区没有关闭[root@localhost~]# swapoff -a

10.初始化master节点

代码语言:javascript
复制
[root@localhost~]# kubeadm init --pod-network-cidr=10.244.0.0/16 YourKubernetes control-plane has initialized successfully! To startusing your cluster, you need to run the following as a regular user:   mkdir -p $HOME/.kube  sudo cp -i /etc/kubernetes/admin.conf$HOME/.kube/config  sudo chown $(id -u):$(id -g)$HOME/.kube/config Youshould now deploy a pod network to the cluster.Run"kubectl apply -f [podnetwork].yaml" with one of the options listedat: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then youcan join any number of worker nodes by running the following on each as root: kubeadmjoin 192.168.40.128:6443 --token eitxr6.l7que99ui33phdts \--discovery-token-ca-cert-hashsha256:2b65bf29e32c1906391b66796f3cd5cf79bce239b43ff82fefb73ace984ac294

11.根据提示准备kubeconfig配置文件

代码语言:javascript
复制
[root@localhost ~]# mkdir -p $HOME/.kube[root@localhost ~]# sudo cp -i /etc/kubernetes/admin.conf$HOME/.kube/config[root@localhost ~]#  sudochown $(id -u):$(id -g) $HOME/.kube/config

12.查看master的组件是否正常

代码语言:javascript
复制
[root@localhost ~]# kubectl get csNAME                STATUS    MESSAGE             ERRORscheduler           Healthy   ok                 controller-manager  Healthy   ok                 etcd-0               Healthy   {"health":"true"}  [root@localhost ~]# kubectl get pods -ANAMESPACE     NAME                                           READY   STATUS    RESTARTS  AGEkube-system  coredns-6955765f44-q42ch                        1/1     Running  0          3m11skube-system  coredns-6955765f44-xld2q                        1/1     Running  0          3m11skube-system  etcd-localhost.localdomain                      1/1     Running  0          3m27skube-system  kube-apiserver-localhost.localdomain           1/1     Running  0          3m27skube-system  kube-controller-manager-localhost.localdomain   1/1    Running   0          3m27skube-system  kube-proxy-zb4dq                                1/1     Running  0          3m11skube-system   kube-scheduler-localhost.localdomain            1/1     Running  0          3m26s [root@localhost ~]# kubectl get nodesNAME                   STATUS   ROLES    AGE    VERSIONlocalhost.localdomain  Ready    master   4m38s  v1.17.0

13.配置俩台node节点

代码语言:javascript
复制
这行是在master节点初始化完成后提示的[root@localhost ~]# kubeadm join 192.168.40.128:6443 --tokeneitxr6.l7que99ui33phdts \>    --discovery-token-ca-cert-hashsha256:2b65bf29e32c1906391b66796f3cd5cf79bce239b43ff82fefb73ace984ac294
代码语言:javascript
复制
W1218 23:48:20.344418    4134join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will beignored when control-plane flag is not set.[preflight] Running pre-flight checks       [WARNINGIsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroupdriver. The recommended driver is "systemd". Please follow the guideat https://kubernetes.io/docs/setup/cri/       [WARNINGService-Kubelet]: kubelet service is not enabled, please run 'systemctl enablekubelet.service'[preflight] Reading configuration from the cluster...[preflight] FYI: You can look at this config file with 'kubectl -nkube-system get cm kubeadm-config -oyaml'[kubelet-start] Downloading configuration for the kubelet from the"kubelet-config-1.17" ConfigMap in the kube-system namespace[kubelet-start] Writing kubelet configuration to file"/var/lib/kubelet/config.yaml"[kubelet-start] Writing kubelet environment file with flags to file"/var/lib/kubelet/kubeadm-flags.env"[kubelet-start] Starting the kubelet[kubelet-start] Waiting for the kubelet to perform the TLSBootstrap... This node has joined the cluster:* Certificate signing request was sent to apiserver and a responsewas received.* The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the control-plane to see this node jointhe cluster.

 在master节点插看是否有子节点的信息

代码语言:javascript
复制
[root@localhost ~]# kubectl get nodes
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux运维交流社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档