首页 > 其他分享 >K8S单Master集群安装(Docker)

K8S单Master集群安装(Docker)

时间:2023-05-27 19:11:24浏览次数:39  
标签:calico server metrics etc Master 节点 Docker K8S docker

原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:[email protected]

文章基于CentOS 7.8系统使用docker作为容器运行时通过kubeadm指导搭建k8s单机master集群,使用calico作为k8s集群的网络插件。

需要服务器可以联网。

环境

节点说明

主机名 IP地址 操作系统
master01.lvan 192.168.100.101 CentOS Linux release 7.8
node01.lvan 192.168.100.102 CentOS Linux release 7.8
node02.lvan 192.168.100.103 CentOS Linux release 7.8

软件环境

软件名 软件版本 作用
CentOS Linux release 7.8 操作系统
docker-ce 20.10.22 容器运行时
metrics-server v0.6.2 k8s集群性能监控插件
kubectl 1.23.2-0 k8s控制工具
kubeadm 1.23.2-0 k8s服务端
kubelet 1.23.2-0 k8s客户端
calico v3.24.5 K8S网络插件
表 1 软件环境

ip地址规划

ip地址 作用
192.168.100.100 k8s主节点
192.168.100.101 k8s子节点1
192.168.100.102 k8s子节点2
10.244.0.0/16 Pod网段地址
表 2 ip地址规划

步骤预览

  1. 操作系统配置:配置IP地址、配置主机名、关闭防火墙、关闭selinux、关闭swap、修改/etc/hosts文件、配置yum源
  2. 安装配置docker
  3. 修改系统内核参数
  4. 安装kubelet软件
  5. 初始化K8S集群
  6. 子节点加入k8s集群
  7. 安装网络插件

操作过程

一、操作系统配置

该章节的所有操作所有节点上均要执行。

设置主机名

按照规划文件中的名称依次设置每个节点的主机名。

# hostnamectl set-hostname   规划的主机名

IP地址配置

按照规划文件中的IP地址依次配置每个节点的IP地址。

# systemctl stop NetworkManager;systemctl disabled NetworkManager;systemctl mask NetworkManager
# cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-修改为你的网卡名
TYPE=Ethernet
BOOTPROTO=none
NAME=修改为你的网卡名
DEVICE=修改为你的网卡名
ONBOOT=yes
IPADDR=修改为你需要设置的ip地址
NETMASK=255.255.255.0
GATEWAY=修改为你需要设置的ip地址网关
DNS1=修改为你需要设置的ip地址DNS
EOF
# systemctl restart network
# ip a

关闭selinux

在/etc/selinux/config中设置SELINUX=为disabled

# sed  -i 's/SELINUX=.*/SELINUX=disabled/g'  /etc/selinux/config
# setenforce  0

关闭swap

在/etc/fstab文件中删除swap的挂载信息行,系统中执行swaoff -a临时关闭swap。

# swapoff  -a
# sed -i '/swap/d'  /etc/fstab

关闭防火墙

关闭防火墙,并设置防火墙为开机不启动

# systemctl stop firewalld;systemctl disable firewalld;systemctl mask firewalld
# systemctl status firewalld 

设置/etc/hosts文件

在/etc/hosts文件中添加所有节点的信息。

# cat >> /etc/hosts <<EOF
192.168.100.100 master01.lvan  master01
192.168.100.101 node01.lvan    node01
192.168.100.102 node02.lvan    node02
EOF

配置yum源

备份当前的yun配置文件,并创建新的yum源文件。

# mkdir -p /etc/yum.repos.d/bak/
# mv /etc/yum.repos.d/CentOS* /etc/yum.repos.d/bak/
# 在/etc/yum.repos.d/目录中创建k8s.repo、epel.repo、docker.repo、CentOS-Base.repo 四个repo源文件,具体内容如下所示。
# yum clean all
# yum repolist 

k8s.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
View Code

epel.repo

[epel]
name=Extra Packages for Enterprise Linux 7 – $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
View Code

docker.repo

[docker-ce-stable]
name=Docker CE Stable – $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
View Code

CentOS-Base.repo

[base]
name=CentOS-$releasever – Base – mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever – Updates – mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever – Extras – mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
View Code

安装常用工具

安装vim、net-tools、bash-completion、wget常用的工具软件。

# yum install vim net-tools bash-completion  wget -y 
# source  /etc/profile.d/bash_completion.sh
# echo 'set paste'  >> ~/.vimrc

二、安装配置docker

该章节的所有操作所有节点上均要执行。

安装docker

# yum install  docker-ce-20.10.22  -y
# systemctl restart docker;systemctl enable docker

设置docker镜像加速和cgroup驱动

# cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://sdmy9bft.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# systemctl daemon-reload;systemctl restart docker

三、修改系统内核配置

该章节的所有操作所有节点上均要执行。

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

四、安装kubelet软件

该章节的所有操作所有节点上均要执行。

# yum install -y kubelet-1.23.2-0 kubeadm-1.23.2-0 kubectl-1.23.2-0 --disableexcludes=kubernetes
# systemctl restart kubelet ; systemctl enable kubelet

五、初始化K8S集群

初始化k8s环境

该操作只在master节点上执行。命令执行完成过后记录下结果。

# kubeadm init --apiserver-advertise-address=192.168.100.100 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.23.2 --pod-network-cidr=10.244.0.0/16
环境初始完成过后根据提示执行命令

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

命令执行完成过后会有如下输出,最好复制出来保存。

To start using 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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.100.100:6443 --token ucgmyb.0prubsd9i70e8xj2 \
        --discovery-token-ca-cert-hash sha256:b9fe9a3b75110c19be94e50534b9fb16ef068a1f9be8ca60e1407d73bc1098bb

配置kubectl命令自动补齐

该操作所有节点上均要执行。

# echo 'source <(kubectl completion bash)' >>  /etc/profile
# source /etc/profile

六、子节点加入k8s集群

获取加入集群的命令

该操作只在master节点上执行。

master节点环境初始化过后会自动生成一个命令。使用这个命令直接复制到子节点上实现子节点加入集群。

如果忘记了使用命令如下获取。

 # kubeadm token create --print-join-command

加入集群

该操作只在子节点上执行。

通过之前记录的命令或者上一步获取的命令,在子节点中复制执行。

# kubeadm join 192.168.100.100:6443 --token ucgmyb.0prubsd9i70e8xj2  --discovery-token-ca-cert-hash sha256:b9fe9a3b75110c19be94e50534b9fb16ef068a1f9be8ca60e1407d73bc1098bb

七、安装网络插件calico

该章节操作只在master节点上执行。

下载calico配置文件

执行wget命令下载calico的yaml文件。

# wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate

修改calico配置文件

把calico.yaml文件中的CALICO_IPV4POOL_CIDR行和其下一行前的#删除掉,并CALICO_IPV4POOL_CIDR其下行的IP地址段改为规划文件中的网段。并在calico.yaml文件中增加蓝色字体内容,指定ens33为通信网卡(多网卡环境中必须要使用,请根据自己实际情况选择正确的网卡),格式要和CALICO_IPV4POOL_CIDR对齐。

# vim calico.yaml
 - name: CALICO_IPV4POOL_CIDR
   value: "10.244.0.0/16"
- name: IP_AUTODETECTION_METHOD
   value: "interface=ens33"

下载caclio所需镜像(可选)

该操作只在master节点上执行。

手动下载calico所需镜像并上传到所有节点中,执行了kubectl apply -f calico.yaml命令后系统会自东下载,但是会有点慢。我们可以提前下载好传到所有节点中。

# grep image calico.yaml  | grep -i calico | awk -F'/' '{print $2"/"$3 }' | uniq
# docker pull  calico/cni:v3.24.5
# docker pull  calico/node:v3.24.5
# docker pull  calico/kube-controllers:v3.24.5
# docker save -o calico_image_3_24_5.tar.gz   calico/cni:v3.24.5   calico/node:v3.24.5  calico/kube-controllers:v3.24.5
# scp calico_image_3_24_5.tar.gz  root@node01:/root/
# scp calico_image_3_24_5.tar.gz  root@node02:/root/

该操作所有节点上均要执行。

加载docker镜像到系统中。

# docker load -i /root/calico_image_3_24_5.tar.gz

安装calico插件

# kubectl apply -f calico.yaml
# kubectl get nodes -o wide
# kubectl get pod -o wide -A
图 1-1 最终结果

八、安装metrics-server

metrics-server可用于k8s集群资源使用监控。

访问网址:https://github.com/kubernetes-sigs/metrics-server 在页面中下拉找到 Installation 章节,找到如下的信息: kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml ,截取蓝色高亮部分内容,在Master节点上执行命令下载conponents.yaml文件。

下载metrics-server软件

# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml
# #查看components.yaml所需要镜像及版本,提前下载
# grep  image components.yaml
        image: k8s.gcr.io/metrics-server/metrics-server:v0.6.2
        imagePullPolicy: IfNotPresent
# #该k8s.gcr.io/metrics-server/metrics-server:v0.6.2镜像由于不可描述的原因下载起来有点麻烦。在https://hub.docker.com/中去下载。
# docker pull k8simage/metrics-server:v0.6.2
# docker tag  k8simage/metrics-server:v0.6.2   k8s.gcr.io/metrics-server/metrics-server:v0.6.2
# #把metrics-server镜像打包并复制到所有节点上去。
# docker save -o metrics-server.tar.gz   k8s.gcr.io/metrics-server/metrics-server:v0.6.2
# scp metrics-server.tar.gz  [email protected]:/root/
# #在其他节点上读取加载metrics-server镜像包。
# docker load -i metrics-server.tar.gz
# #确认镜像包导入正常。
# docker images

修改metrics-server.yaml文件

在下载metrics-server的配置文件中修改添加蓝色字体内容。

# sed  -i -e  's/kubelet-preferred-address-types.*/kubelet-preferred-address-types=InternalIP/g' -e 's/metric-resolution.*/metric-resolution=30s/g'  -e '/metric-resolution/a\        - --kubelet-insecure-tls' components.yaml

创建metrics-server pod

执行命令创建pod,并确认metrics-server pod运行正常,可以正常获取到k8s资源性能数据。

# kubectl apply -f components.yaml
# kubectl get pods -A
# kubectl top nodes

 

标签:calico,server,metrics,etc,Master,节点,Docker,K8S,docker
From: https://www.cnblogs.com/Pigs-Will-Fly/p/17437147.html

相关文章

  • K8S常用操作(node)
    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。邮箱:[email protected]说明K8S常用操作,记录日常K8S维护作用的常用命令及常见的问题的处理办法,提供简单可行的操作、拍掌的思路方法步骤。本文章为k8s的node相关操作篇,指导读者对k8s集群中的node节点进行日常的......
  • 410随身wifi刷debian,挂docker
    简介:随身wifi是个好玩的小东西,内置wifi,4gmodem,还有ttl,可以刷debian,openwrt。难能可贵的是便宜,9.9包邮。加之最近看电影已经改了阿里云转存,alist转webdav,电视或盒子kodi看共享,便下单几个,刷好送朋友玩。记录一下刷机过程一:备份备份不可少,虽然便宜,刷坏也不好救。推荐mikoser......
  • Docker网络配置
    1、Docker网络概念1.1、网络驱动Docker网络子系统使用可插拔的驱动,默认情况下有多个驱动程序,并提供核心联网功能。bridge:桥接网络,这是默认的网络驱动程序(不指定驱动程序创建的容器默认是bridge驱动)。host:主机网络。消除容器和主机的网络隔离,直接使用主机的网络。overlay:覆盖网络。......
  • 网安--Docker
    二、容器技术Docker1、开箱即用2、快速部署3、可移植性强4、环境隔离docker可以理解为假的操作系统,可以不安装操作系统使用,虚拟机必须按照操作系统,速度更快,占用内存更小一般为mb,进程间隔离性差,安全性差。docker可以打包好一个环境,如(一键安装php+mysql+apache)......
  • k8s-IPV6升级(二)
    一、手动升级步骤导入镜像至镜像仓库#将镜像导入到镜像仓库中##apiserver镜像dockerload-ikube-apiserver_v1.21.5.tardockerpushregistry.paas/cmss/kube-apiserver:v1.21.5##controller-manager镜像dockerload-ikube-controller-manager_v1.21.5.tardocker......
  • Centos7配置普通用户不加sudo直接运行docker命令
    平时普通用户执行docker命令都要在docker命令前加上sudo就挺麻烦的,咱们把普通用户执行docker要加的sudo去掉.设置用户组sudogroupadddocker如果出现groupadd:cannotopen/etc/group,则使用以下两行命令解锁,如果没有则不需要运行,直接跳过即可sudochattr-i/etc/shad......
  • docker中数据卷和数据卷容器有什么区别
    在Docker中,数据卷(datavolumes)和数据卷容器(datavolumecontainers)是用于在容器之间共享和持久化数据的两种不同的机制。数据卷是一个特殊的目录,可以绕过容器文件系统的常规层,直接在主机的文件系统上进行管理。数据卷可以在容器之间共享,并且可以持久存在,即使容器被删除,数据卷仍然......
  • 云原生(docker jenkins k8s)
    docker(1)架构●Docker_Host:○安装Docker的主机●DockerDaemon:○运行在Docker主机上的Docker后台进程●Client:○操作Docker主机的客户端(命令行、UI等)●Registry:○镜像仓库○DockerHub●Images:○镜像,带环境打包好的程序,可以直接启动运行●Containers:○......
  • .net core部署到k8s
    .netcore部署到k8s参考准备dockerfiledotnetnewmvc--namemywebdotnetpublish-crelease-opublishFROMmcr.microsoft.com/dotnet/aspnet:7.0ASbaseWORKDIR/appEXPOSE80COPY..ENTRYPOINT["dotnet","myweb.dll"]dockerbuild......
  • Docker CLI docker container commit常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......