cento os 7 使用 kubeadmin 安装k8s 1.27.0

559 阅读2分钟
  • 环境基于VMware虚拟机搭建

安装三台centos ip地址分别为

master 198.168.44.141
node1  198.168.44.142
node2  198.168.44.143
  • vmware 网络配置如下 image.png

固定虚拟机ip 使用命令 ip addr 查看ip

image.png

此处ip地址为 192.168.44.141 我们要将他固定下来,不然重启虚拟机后IP有可能会改变

打开/etc/sysconfig/network-scripts目录

cd /etc/sysconfig/network-scripts

查看文件

image.png 将文件内容改成如下

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID=12f37e26-996e-4168-ba8a-0c85cf8ba742
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.44.141
GATEWAY=192.168.44.2
DNS1=8.8.8.8
PREFIX=24

重启网络

service network restart

其他两台按照以上操作固定好ip

下面是固定后的操作

关闭服务器防火墙

systemctl disable firewalld --now
setenforce 0
sed  -i -r 's/SELINUX=[ep].*/SELINUX=disabled/g' /etc/selinux/config

设置hosts解析

cat  >> /etc/hosts << EOF
192.168.44.141 k8s-master
192.168.44.142 k8s-node-1
192.168.44.143 k8s-node-2
EOF

修改主机名

hostnamectl set-hostname k8s-master && bash

配置时间(如果时间比较大,k8s会有一些异常,比如加入失败什么的)

yum -y install ntpdate
ntpdate ntp1.aliyun.com

关闭swap(k8s要求的)

swapoff --all

修改Linux内核参数,添加网桥过滤器和地址转发功能

modprobe br_netfilter

cat >> /etc/sysctl.d/kubernetes.conf <<EOF
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/kubernetes.conf

安装docker

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache

# yum-utils软件用于提供yum-config-manager程序
yum install -y yum-utils

# 使用yum-config-manager创建docker阿里存储库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 -y

image.png

配置加速,我使用的是阿里云的加速,加速地址可以去阿里云申请一个

mkdir /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": ["填自己申请的或者百度一个"],
    "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

启用docker 服务

systemctl enable docker --now

安装docker-cri

1.24之后的版本,k8s默认容器就不是docker了,如果想要继续使用docker 就要安装docker-cri

我这里是直接本地下载之后上传到虚拟机的,我的虚拟机没法访问github

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm

image.png

更新/usr/lib/systemd/system/cri-docker.service

[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target

启用cri

systemctl daemon-reload 
systemctl start cri-docker.service 
systemctl enable cri-docker.service

配置k8s源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

安装kubelet ,kubeadmin,kubectl

yum install -y kubelet-1.27.0 kubeadm-1.27.0 kubectl-1.27.0

开启kubelet,不开启会执行不了命令

systemctl enable kubelet.service --now

创建 kubeadm-init.yaml文件内容如下

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.44.141#本机ip
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/cri-dockerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s-master # 这里填写的是主机名
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #加速地址
kind: ClusterConfiguration
kubernetesVersion: 1.27.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

kubeadm 初始化

kubeadm init --config=kubeadm.yaml

image.png

配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

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

可以使用命令行生产的加入命令,在客户端执行就可以了

image.png

也可以用

kubeadm token create --print-join-command

重新生成一条join命令

加入之后使用如下命令查看节点(在主节点执行,客户端不行),可以看到节点的状态都是noteReady

kubectl get nodes

image.png

接下来我们需要安装网络插件calico ,照着官网做就可以了

安装calico之后再次查看节点状态

kubectl get nodes

image.png

可以看到状态都是ready

查看系统pod

kubectl get pod -n kube-system -owide

image.png 全部显示running 并且ready为1/1才对

到这里k8s就已经安装好了了

我们创建一个简单的Deployment测试一下,创建一个为nginx-test.yaml的文件内容如下

apiVersion: apps/v1
kind: Deployment
metadata:
  name:  nginx
  namespace: default
  labels:
    app:  nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app:  nginx
    spec:
      # initContainers:
        # Init containers are exactly like regular containers, except:
          # - Init containers always run to completion.
          # - Each init container must complete successfully before the next one starts.
      containers:
      - name:  nginx
        image:  nginx:latest

然后执行

kubectl apply -f nginx-test.yaml 

image.png

这里显示部署已经可以了

查看一下容器状态

kubectl get pod -owide

image.png

显示的状态都是running没有什么问题

接下来我们测试一下

curl 172.16.109.68

image.png 可以看到nginx 可以正确返回

到这里基本上就没啥问题了,后续还有一个ingress没有安装,下一篇我在安装一下