Kubernetes(K8S)简介和安装部署详细教程

1、K8S安装

一、概述

Kubernetes([kubə'netis])是一个由Google 开源的全新的分布式容器集群管理系统,由于从字母K到字母s中间有8个字母,所以简称K8s。

二、准备

IP角色内存
192.168.1.130master4G
192.168.1.131node2G
192.168.1.132node2G

说明:上述Linux环境网络适配器均为NAT(网络地址转换模式‌);

三、安装

1、共性操作

该操作要求每个节点均需执行的相同操作,包括修改hosts、时间同步、禁用firewalld、禁用selinux、禁用swap、网桥设置和安装K8s等。

a、修改hosts

命令:

# cat >> /etc/hosts << EOF
192.168.1.130 master
192.168.1.131 node1
192.168.1.132 node2
EOF
# cat /etc/hosts
b、时间同步
# systemctl start chronyd && systemctl enable chronyd
# date 
c、禁用firewalld  
# systemctl stop firewalld && systemctl disable firewalld
d、禁用selinux
# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

e、禁用swap

临时关闭, 重启失效:

# swapoff -a

永久关闭:

# swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

默认情况下,K8s为了追求高性能,不建议使用交换分区,为此它要求每个节点禁用swap,否则各个节点中的kubelet无法运行。

f、网桥设置

# 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 --system

 g、docker安装

# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum makecache fast
# yum -y install docker-ce
# systemctl enable docker && systemctl start docker
# docker -v

注意:yum -y install docker只能安装docker-1.13.x老版本的docker,2017年后版本有了CE(社区版本)和EE(企业版本),所以新版本使用yum -y install docker-ce

设置daemon.json:

# mkdir -p /etc/docker
# tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://ha65u7j9.mirror.aliyuncs.com"]
}
EOF
# systemctl daemon-reload && systemctl restart docker

在某个节点(master节点或node节点)中运行cat /var/lib/kubelet/config.yaml |grep group命令可以看出kubelet默认 cgoup 驱动为systemd,而docker 默认驱动为 cgroupfs,但K8s官网要求docker 和 kubelet 服务中的 cgroup 驱动必须一致,为此设置daemon.json时添加了"exec-opts": ["native.cgroupdriver=systemd"]配置。

g、安装K8s

①、镜像:

# cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# cat /etc/yum.repos.d/kubernetes.repo

②、安装:

# yum install -y kubeadm-1.23.17 kubectl-1.23.17 kubelet-1.23.17
# systemctl enable kubelet
# journalctl -xefu kubelet # 查看运行日志

2、异性操作

K8s环境搭建过程中有些命令需要在不同角色的节点执行,异性操作罗列了不同角色计算机执行的命令

a、master

①、设置hostname:

# hostnamectl set-hostname master

②、初始化Kubernetes,保存该命令输出的一个join命令,该join命令需要在node角色的节点上执行

# kubeadm init \
  --apiserver-advertise-address=192.168.1.130 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.17 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all

说明:

– apiserver-advertise-address #集群通告地址(master 机器IP)

– image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址

– kubernetes-version #K8s版本,与上面安装的一致

– service-cidr #集群内部虚拟网络,Pod统一访问入口

– pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致

③、环境配置  

普通用户:

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

root用户:

# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
# source /etc/profile

 ④、配置flannel

flannel 和 calico 都是用于k8s节点之间容器网络通信的一个k8s组件,flannel可以为不同node节点的分配不同的子网,实现容器间的跨机通信,从而实现整个kubenets层级通信。

下载:

# cd /opt
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

或者

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P /opt

上传:

kubectl apply -f /opt/kube-flannel.yml
b、node

①、设置hostname:

hostnamectl set-hostname noden

每个node节点都要执行上面命令,n的值和/etc/hosts 文件从节点相一致。

②、执行kubeadm join命令,该命令是master节点 初始化k8s时生成的

kubeadm join 192.168.1.130:6443 --token 5hj7w9.kt3fnduortroodcd \
        --discovery-token-ca-cert-hash 

注意:上面命令中token默认有效期为24小时,过期后可以在master节点执行kubeadm token create --print-join-command重新创建token

③、环境配置

echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profile # 配置资源
source /etc/profile # 加载资源

3、节点状态

# kubectl get node
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   9m9s    v1.23.17
node1    Ready    <none>                 2m29s   v1.23.17
node2    Ready    <none>                 2m10s   v1.23.17

2、使用 K8S 安装 Nginx

1 配置

命令:

[root@master ~]# vi /opt/nginx.yaml

内容:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              protocol: TCP
              containerPort: 80
          resources:
            limits:
              cpu: "1.0"
              memory: 512Mi
            requests:
              cpu: "0.5"
              memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
  annotations:
  name: nginx-service
spec:
  ports:
    - port: 80
      targetPort: 80
      nodePort: 32001
      protocol: TCP
  selector:
    app: nginx
  sessionAffinity: None
  type: NodePort

上传:

[root@master ~]# kubectl apply -f /opt/nginx.yaml

2 状态

[root@master opt]# kubectl get pod,svc
NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-59d7db4f6f-4xdbs   1/1     Running   0          6m24s
pod/nginx-deployment-59d7db4f6f-65n9x   1/1     Running   0          6m24s
pod/nginx-deployment-59d7db4f6f-w5fbs   1/1     Running   0          6m24s

NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP        39m
service/nginx-service   NodePort    10.110.189.13   <none>        80:32001/TCP   6m24s
[root@master ~]#

说明:Running表示启动成功

3 访问

启动浏览器—>访问http://192.168.1.130:32001,如下所示:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值