Centos7安装部署k8s(kubernetes)最新v1.27.1

k8s安装
centos7.9最小安装版本
从零开始的k8s安装
硬件配置要求
cpu >= 2核
硬盘 >= 20G
内存 >= 2G
节点数量建议为奇数(3, 5, 7, 9等)(1台好像也能搭,没试过)
以下命令出除特殊要求外,其余都建议在master主机执行


主机名    IP    配置
master    172.31.0.10    2核+2G+20G
node1    172.31.0.11     2核+2G+20G
node2    172.31.0.12    2核+2G+20G

dns

执行命令:hostnamectl set-hostname newname,newname就是你想改的名字

1. 执行命令修改配置文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33 ,将最后一行属性的值改为yes

 2. 保存退出,执行命令重启网络服务

service network restart 


一. 安装(所有机器都要执行)
执行以下命令安装必备插件

# yum 更新
sudo yum update -y

#如果下载慢更换源

阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all

yum makecache


# tab 命令补全
sudo yum install -y bash-completion
# wget
sudo yum install -y wget
# vim 编辑器
sudo yum install -y vim-enhanced
# 网络工具
sudo yum install -y net-tools
# gcc 编译器
sudo yum install -y gcc

将主机名指向本机IP,主机名只能包含:字母、数字、-(横杠)、.(点)

获取主机名

hostname
1
设置主机名

hostnamectl set-hostname  主机名
1
将节点加入到 hosts 中

cat >> /etc/hosts << EOF
172.31.0.10 master1
172.31.0.11 node1
172.31.0.12 node2
EOF

设置时间同步

sudo yum -y install ntpdate


sudo ntpdate ntp1.aliyun.com


sudo systemctl status ntpdate


sudo systemctl start ntpdate

sudo systemctl status ntpdate


sudo systemctl enable ntpdate

关闭防火墙或者开通指定端口(这里使用关闭防火墙)systemctl stop firewalld.service

systemctl stop firewalld.service
 
sudo systemctl disable firewalld.service

如果没有关闭可能是没有安装

yum install firewalld

自动补全设置

yum install bash-completion

当前用户:

echo 'source <(kubectl completion bash)' >>~/.bashrc 

#添加进环境变量之后记得 source 一下才可以使用。kubeadm 同理。
系统全局:

kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null

kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null


关闭 swap 交换空间

free -h
sudo swapoff -a
sudo sed -i 's/.*swap.*/#&/' /etc/fstab
free -h

关闭 selinux

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

安装 docker , Containerd

# 删除 docker(如果有的话)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装必备工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 加入 docker 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 

# 安装 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 安装 containerd
sudo yum install -y containerd

# 停止 containerd
sudo systemctl stop containerd.service

# 生成并修改配置文件
sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.bak
sudo containerd config default > $HOME/config.toml
sudo cp $HOME/config.toml /etc/containerd/config.toml

sudo sed -i "s#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml

sudo sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml

# 将 containerd 加入开机自启
sudo systemctl enable --now containerd.service

# 启动 docker
sudo systemctl start docker.service
# 将 docker 加入开机自启
sudo systemctl enable docker.service
sudo systemctl enable docker.socket
sudo systemctl list-unit-files | grep docker

# 设置 docker 镜像加速
sudo mkdir -p /etc/docker
# 镜像地址换成你自己的阿里云镜像地址
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://h9x9zgyr.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker


sudo docker info

sudo systemctl status docker.service
sudo systemctl status containerd.service


添加阿里云 k8s 镜像仓库

cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
# 是否开启本仓库
enabled=1
# 是否检查 gpg 签名文件
gpgcheck=0
# 是否检查 gpg 签名文件
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

转发IPv4并让iptables看到桥接流量

cat >/etc/modules-load.d/k8s.conf < overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter

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

# 通过运行以下指令确认 br_netfilter 和 overlay 模块被加载
lsmod | egrep 'overlay|br_netfilter'
# 通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 系统变量在你的 sysctl 配置中被设置为 1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward


安装 k8s

# 安装 1.27.1 版本
sudo yum install -y kubelet-1.27.1-0 kubeadm-1.27.1-0 kubectl-1.27.1-0 --disableexcludes=kubernetes --nogpgcheck

或者

sudo yum install -y kubelet-1.27.3-0 kubeadm-1.27.3-0 kubectl-1.27.3-0 --disableexcludes=kubernetes --nogpgcheck

# 安装最新版本(生产环境不建议)
# sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes --nogpgcheck

systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl enable kubelet

二. 启动
master 初始化(仅在master节点主机上执行)

kubeadm init --image-repository=registry.aliyuncs.com/google_containers --apiserver-advertise-address=172.31.0.10 --kubernetes-version=v1.27.1 --service-cidr=10.96.0.0/16 --pod-network-cidr=192.168.0.0/16

或者

kubeadm init --image-repository=registry.aliyuncs.com/google_containers --apiserver-advertise-address=172.31.0.10 --kubernetes-version=v1.27.3 --service-cidr=10.96.0.0/16 --pod-network-cidr=192.168.0.0/16

# --image-repository                     镜像加速地址,一般不动
# --apiserver-advertise-address  master 节点IP地址,自己改
# --kubernetes-version                     kubernetes 版本,自己选择的什么版本就改成什么版本


# 初始化失败可以使用 kubeadm reset 重置
# 失败原因多半是因为网络问题,可以换个网络试试

初始化成功后执行(仅在master节点主机上执行)

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

将 node 加入集群(仅在node节点主句执行)不要直接复制,每个人不一样

# 执行成功后,会出现类似下列内容:
kubeadm join 172.31.0.10:6443 --token zejiz8.hwgcgn8b3zqgokzo \
    --discovery-token-ca-cert-hash sha256:aac3c8214ea555470c99db3095b1975c544f6984eb46e193f8751251c2164589 
# 将控制台打印的这句复制到 node 节点主机上执行就行

# 如果忘记或者过期可以使用以下命令重新生成
# kubeadm token create --print-join-command
查看集群状态(master 节点执行)

kubectl get nodes
1
输出:

NAME     STATUS   ROLES           AGE     VERSION
master   NotReady    control-plane   7h21m   v1.27.1
node1    NotReady              7h20m   v1.27.1
node2    NotReady              7h20m   v1.27.1
1
2
3
4
可以看到所有节点都是 NotReady ,这是因为还没有配置网络

配置网络(仅在master节点执行)

k8s与Calico版本对应

Kubernetes 版本    Calico 版本    Calico 文档    
1.18、1.19、1.20    3.18    https://projectcalico.docs.tigera.io/archive/v3.18/getting-started/kubernetes/requirements    https://projectcalico.docs.tigera.io/archive/v3.18/manifests/calico.yaml
1.19、1.20、1.21    3.19    https://projectcalico.docs.tigera.io/archive/v3.19/getting-started/kubernetes/requirements    https://projectcalico.docs.tigera.io/archive/v3.19/manifests/calico.yaml
1.19、1.20、1.21    3.20    https://projectcalico.docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements    https://projectcalico.docs.tigera.io/archive/v3.20/manifests/calico.yaml
1.20、1.21、1.22    3.21    https://projectcalico.docs.tigera.io/archive/v3.21/getting-started/kubernetes/requirements    https://projectcalico.docs.tigera.io/archive/v3.21/manifests/calico.yaml
1.21、1.22、1.23    3.22    https://projectcalico.docs.tigera.io/archive/v3.22/getting-started/kubernetes/requirements    https://projectcalico.docs.tigera.io/archive/v3.22/manifests/calico.yaml
1.21、1.22、1.23    3.23    https://projectcalico.docs.tigera.io/archive/v3.23/getting-started/kubernetes/requirements    https://projectcalico.docs.tigera.io/archive/v3.23/manifests/calico.yaml
1.22、1.23、1.24    3.24    https://projectcalico.docs.tigera.io/archive/v3.24/getting-started/kubernetes/requirements    https://projectcalico.docs.tigera.io/archive/v3.24/manifests/calico.yaml
1.23、1.24、1.25、1.26、1.27    3.25    https://projectcalico.docs.tigera.io/archive/v3.25/getting-started/kubernetes/requirements    https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml
或者自己去官网查看版本对应关系

https://docs.tigera.io/calico/latest/getting-started/kubernetes/requirements

下载(网址换成自己版本对应的即可)

wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.26/manifests/calico.yaml
1
下载不了的可以把后面网址复制到浏览器下载下来后在传到虚拟机

修改 calico.yaml 文件

vim calico.yaml
1
# 在 - name: CLUSTER_TYPE 下方添加如下内容
- name: CLUSTER_TYPE
  value: "k8s,bgp"
  # 下方为新增内容
- name: IP_AUTODETECTION_METHOD
  value: "interface=master节点主机的网卡名称"

比如

- name: IP_AUTODETECTION_METHOD

    value: interface=ens33

配置网络

kubectl apply -f calico.yaml
1

方式二 :

网页访问  https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/calico.yaml

 cat calico.yaml |grep image   查看需要下载 的镜像  
          image: docker.io/calico/cni:v3.26.0
          imagePullPolicy: IfNotPresent
          image: docker.io/calico/cni:v3.26.0
          imagePullPolicy: IfNotPresent
          image: docker.io/calico/node:v3.26.0
          imagePullPolicy: IfNotPresent
          image: docker.io/calico/node:v3.26.0
          imagePullPolicy: IfNotPresent
          image: docker.io/calico/kube-controllers:v3.26.0
          imagePullPolicy: IfNotPresent
 

将docker.io/calico/cni:v3.26.0  改成docker pull quay.io/calico/cni:v3.26.0

 在calico.yaml 里面半3.26 全部修改 quay.io/quay.io/calico/cni:v3.26.0

更新上述ip

kubectl apply -f calico.yaml


再次查看节点信息

查看 node 状态

kubectl get nodes 

kubectl get pods --all-namespaces -o wide
1
输出:

[root@master ~]# kubectl get pods --all-namespaces -o wide
 


可以看到正在初始化,现在稍等一段时间(多久看网络情况)

初始化失败大部分情况也是因为网络原因,建议换个网络试试

初始化成功

查看 node 状态

kubectl get nodes 
1
输出:

NAME     STATUS   ROLES           AGE     VERSION
master   Ready    control-plane   7h21m   v1.27.1
node1    Ready              7h20m   v1.27.1
node2    Ready              7h20m   v1.27.1
1
2
3
4
全部 Ready

查看 pod 状态

kubectl get pods --all-namespaces -o wide
1
输出:

NAMESPACE     NAME                                       READY   STATUS    RESTARTS      AGE     IP               NODE     NOMINATED NODE   READINESS GATES
kube-system   calico-kube-controllers-6c99c8747f-92ctj   1/1     Running   1 (64m ago)   31m   172.16.219.69    master            
kube-system   calico-node-72n28                          1/1     Running   2 (64m ago)   31m   192.168.42.150   master            
kube-system   calico-node-jb2n8                          1/1     Running   1 (64m ago)   31m   192.168.42.152   node2              
kube-system   calico-node-m6ndl                          1/1     Running   1 (64m ago)   31m   192.168.42.151   node1              
kube-system   coredns-7bdc4cb885-6l9dk                   1/1     Running   1 (64m ago)   33m   172.16.219.70    master            
kube-system   coredns-7bdc4cb885-j7qlm                   1/1     Running   1 (64m ago)   33m   172.16.219.68    master            
kube-system   etcd-master                                1/1     Running   1 (64m ago)   33m   192.168.42.150   master            
kube-system   kube-apiserver-master                      1/1     Running   1 (64m ago)   33m   192.168.42.150   master            
kube-system   kube-controller-manager-master             1/1     Running   1 (64m ago)   33m   192.168.42.150   master            
kube-system   kube-proxy-558cb                           1/1     Running   1 (64m ago)   33m   192.168.42.150   master            
kube-system   kube-proxy-fpk62                           1/1     Running   1 (64m ago)   32m   192.168.42.152   node2              
kube-system   kube-proxy-sm4ph                           1/1     Running   1 (64m ago)   32m   192.168.42.151   node1              
kube-system   kube-scheduler-master                      1/1     Running   1 (64m ago)   33m   192.168.42.150   master            

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
全部 Ready

k8s 命令补全

! grep -q kubectl "$HOME/.bashrc" && echo "source /usr/share/bash-completion/bash_completion" >>"$HOME/.bashrc"
! grep -q kubectl "$HOME/.bashrc" && echo "source <(kubectl completion bash)" >>"$HOME/.bashrc"
! grep -q kubeadm "$HOME/.bashrc" && echo "source <(kubeadm completion bash)" >>"$HOME/.bashrc"
! grep -q crictl "$HOME/.bashrc" && echo "source <(crictl completion bash)" >>"$HOME/.bashrc"
source "$HOME/.bashrc"
1
2
3
4
5
常用命令

# 获取节点
kubectl get nodes -o wide
# 实时查询nodes状态
watch kubectl get nodes -o wide
# 获取pod
kubectl get pods --all-namespaces -o wide
# 查看镜像列表
kubeadm config images list
# 节点加入集群
kubeadm token create --print-join-command
# 描述node
kubectl describe node k8s-master
# 描述pod
kubectl describe pod kube-flannel-ds-hs8bq --namespace=kube-system
1
2
3
4
5
6
7
8
9
10
11
12
13
14
三. 测试
创建一个 nginx 来测试

kubectl create deployment nginx --image=nginx
1
查看状态

kubectl get pods -o wide
1
输出:

NAME                     READY   STATUS    RESTARTS   AGE
nginx-77b4fdf86c-pfklq   1/1     ContainerCreating   0          72m
1
2
等待一段时间,等 ContainerCreating 变成 Running 时进行下一步

暴露端口

kubectl expose deployment nginx --port=80 --type=NodePort
1
查看 pos 及服务信息

kubectl get pod,svc
1
输出:

NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-77b4fdf86c-pfklq   1/1     Running   0          76m

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1              443/TCP        7h47m
service/nginx        NodePort    10.98.106.212          80:32403/TCP   74m
1
2
3
4
5
6
在浏览器中访问

http://192.168.42.150:32403
1
地址根据你自己的主机变化,端口上面输出的信息中 PORT(S) 这一栏会有

访问成功就说明 k8s 安装部署成功!
 

你可能感兴趣的:(centos,kubernetes,tekton)