kubernetes笔记(一)

news/2024/10/3 23:16:57/

kubernetes安装:

主机清单

主机名IP地址最低配置
master192.168.1.502CPU,4G内存
node-0001192.168.1.512CPU,4G内存
node-0002192.168.1.522CPU,4G内存
node-0003192.168.1.532CPU,4G内存
node-0004192.168.1.542CPU,4G内存
node-0005192.168.1.552CPU,4G内存
harbor192.168.1.302CPU,4G内存

安装控制节点:

1.配置软件仓库

知识点:createrepo, /etc/yum.repos.d/local.repo(仓库配置文件),  yum/dnf

2.系统环境配置

知识点:禁用firewalld和swap

3.安装软件包

[root@master ~]# vim /etc/hosts
192.168.1.30    harbor
192.168.1.50    master
192.168.1.51    node-0001
192.168.1.52    node-0002
192.168.1.53    node-0003
192.168.1.54    node-0004
192.168.1.55    node-0005
[root@master ~]# dnf install -y kubeadm kubelet kubectl containerd.io ipvsadm ipset iproute-tc
[root@master ~]# containerd config default >/etc/containerd/config.toml
[root@master ~]# vim /etc/containerd/config.toml
61:     sandbox_image = "harbor:443/k8s/pause:3.9"
125:    SystemdCgroup = true
154 行新插入:[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://harbor:443"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"]endpoint = ["https://harbor:443"][plugins."io.containerd.grpc.v1.cri".registry.configs."harbor:443".tls]insecure_skip_verify = true
[root@master ~]# systemctl enable --now kubelet containerd

4.配置内核参数

# 加载内核模块
cat >/etc/modules-load.d/containerd.conf<<EOF
overlay
br_netfilter
xt_conntrack
EOF
systemctl start systemd-modules-load.service # 设置内核参数
cat >/etc/sysctl.d/99-kubernetes-cri.conf<<EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.netfilter.nf_conntrack_max = 1000000
EOF
sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf

5.导入k8s镜像

[root@master ~]# dnf install -y docker-ce
[root@master ~]# mkdir -p /etc/docker
[root@master ~]# vim /etc/docker/daemon.json 
{"registry-mirrors":["https://harbor:443"],"insecure-registries":["harbor:443"]
}
[root@master ~]# systemctl enable --now docker# 登录 harbor 仓库,上传镜像
[root@master ~]# docker login harbor:443 
Username: admin
Password: ********
Login Succeeded
[root@master ~]# docker load -i init/v1.xx.tar.xz
[root@master ~]# docker images|while read i t _;do[[ "${t}" == "TAG" ]] && continue[[ "${i}" =~ ^"harbor:443/".+ ]] && continuedocker tag ${i}:${t} harbor:443/k8s/${i##*/}:${t}docker push harbor:443/k8s/${i##*/}:${t}docker rmi ${i}:${t} harbor:443/k8s/${i##*/}:${t}
done

6.设置Tab键

source <(kubeadm completion bash|tee /etc/bash_completion.d/kubeadm)
source <(kubectl completion bash|tee /etc/bash_completion.d/kubectl)

7.master安装

# 测试系统环境
[root@master ~]# kubeadm init --config=init/init.yaml --dry-run 2>error.log
[root@master ~]# cat error.log
[root@master ~]# rm -rf error.log /etc/kubernetes/tmp
# 主控节点初始化
[root@master ~]# kubeadm init --config=init/init.yaml |tee init/init.log# 管理授权
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config# 验证安装结果
[root@master ~]# kubectl get nodes

安装网络插件

上传镜像

[root@master ~]# cd plugins/calico
[root@master calico]# docker load -i calico.tar.xz
[root@master calico]# docker images|while read i t _;do[[ "${t}" == "TAG" ]] && continue[[ "${i}" =~ ^"harbor:443/".+ ]] && continuedocker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}docker push harbor:443/plugins/${i##*/}:${t}docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
done

安装calico

[root@master calico]# sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' calico.yaml[root@master calico]# kubectl apply -f calico.yaml
[root@master calico]# kubectl get nodes

安装计算节点

1.获取凭证

# 查看 token
kubeadm token list
TOKEN                     TTL         EXPIRES                
abcdef.0123456789abcdef   23h         2022-04-12T14:04:34Z# 删除 token
kubeadm token delete abcdef.0123456789abcdef
bootstrap token "abcdef" deleted# 创建 token
kubeadm token create --ttl=0 --print-join-command
kubeadm join 192.168.1.50:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx# 获取token_hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der |openssl dgst -sha256 -hex

2.node安装

[root@node ~]# 参考控制节点安装步骤2
[root@node ~]# 参考控制节点安装步骤3
[root@node ~]# 参考控制节点安装步骤4[root@node ~]# kubeadm join 192.168.1.50:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx[root@master ~]# kubectl get nodes

3.批量部署

嫌“2.node安装”那个步骤太麻烦,使用ansible执行剧本

ansible.cfg

[defaults]
inventory         = hostlist
host_key_checking = False

hostlist

[nodes]
192.168.1.[51:55]

run.yaml

- name: node join k8s clusterhosts: nodes,gitlabvars:master: "192.168.1.50:6443"token: "xxx"token_hash: "sha256:xxx"tasks:- name: disable swap from fstab filelineinfile:path: /etc/fstabstate: absentregexp: 'swap'- name: remove firewalld packagesdnf:name: "firewalld-*"state: absent- name: install k8s node packagesdnf:name: kubeadm,kubelet,kubectl,containerd.io,ipvsadm,ipset,iproute-tcstate: latestupdate_cache: yes- name: update modify config.tomltemplate:src: config.j2dest: /etc/containerd/config.tomlowner: rootgroup: rootmode: '0644'- name: create containerd.confcopy:dest: /etc/modules-load.d/containerd.confowner: rootgroup: rootmode: '0644'content: |overlaybr_netfilterxt_conntrack- name: modprobe br_netfiltershell: modprobe br_netfilter- name: create 99-kubernetes-cri.confcopy:dest: /etc/sysctl.d/99-kubernetes-cri.confowner: rootgroup: rootmode: '0644'content: |net.ipv4.ip_forward = 1net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.netfilter.nf_conntrack_max = 1000000- name: set /etc/hostscopy:dest: /etc/hostsowner: rootgroup: rootmode: '0644'content: |::1           localhost localhost.localdomain localhost6 localhost6.localdomain6127.0.0.1     localhost localhost.localdomain localhost4 localhost4.localdomain4192.168.1.30        harbor192.168.1.50  master{% for i in groups.nodes %}{{ hostvars[i].ansible_eth0.ipv4.address }}   {{ hostvars[i].ansible_hostname }}{% endfor %}- name: enable k8s kubelet,runtime serviceservice:name: "{{ item }}"state: startedenabled: yesloop:- systemd-modules-load- containerd- kubelet- name: check node statestat:path: /etc/kubernetes/kubelet.confregister: result- name: node join clustershell: |swapoff -asysctl -p /etc/sysctl.d/99-kubernetes-cri.confkubeadm join {{ master }} --token {{ token }} --discovery-token-ca-cert-hash {{ token_hash }}args:executable: /bin/bashwhen: result.stat.exists == False"nodeinit.yaml" 86L, 2639C                                

执行剧本

ansible-playbook run.yaml

查看集群状态

# 验证节点工作状态
[root@master ~]# kubectl get nodes# 验证容器工作状态
[root@master ~]# kubectl -n kube-system get pods


http://www.ppmy.cn/news/1534145.html

相关文章

828华为云征文|华为云 Flexus X 实例初体验

一直想有自己的一款的服务器&#xff0c;为了更好的进行家庭娱乐&#xff0c;甚至偶尔可以满足个人搭建开发环境的需求&#xff0c;直到接触到了华为云 Flexus X 云服务器。Flexus 云服务器 X 实例是面向中小企业和开发者打造的轻量级云服务器。提供快速应用部署和简易的管理能…

以太网交换安全:MAC地址表安全

一、MAC地址表安全 MAC地址表安全是网络安全中的一个重要方面&#xff0c;它涉及到网络设备的MAC地址表的管理和保护。以下是对MAC地址表安全的详细介绍&#xff1a; &#xff08;1&#xff09;基本概念 定义&#xff1a;MAC地址表是网络设备&#xff08;如交换机&#xff0…

electron出现乱码和使用cmd出现乱码

第一种出现乱码。这种可以通过chcp 65001&#xff0c;设置为utf-8的编码。第二种&#xff0c;是执行exec的时候出现乱码&#xff0c;这个时候需要设置一些编码格式&#xff0c;可以通过iconv-lite进行解决&#xff0c;这个方法是node自带的&#xff0c;所以不需要导入。使用方法…

人工智能价格战——如何降低成本让人工智能更易于普及

十年前&#xff0c;开发人工智能 (AI) 是只有大公司和资金充足的研究机构才能负担得起的事情。必要的硬件、软件和数据存储成本非常高。但从那时起&#xff0c;情况发生了很大变化。一切始于 2012 年的 AlexNet&#xff0c;这是一种深度学习模型&#xff0c;展示了神经网络的真…

主流前端框架实际案例说明

为了更深入地理解不同前端框架的特点和适用场景&#xff0c;以下将通过几个具体案例分析&#xff0c;探讨在实际项目中选择框架的决策过程。 案例一&#xff1a;电商平台开发 项目背景 一个新兴电商平台希望快速上线&#xff0c;提供良好的用户体验和性能&#xff0c;同时需…

Electron应用创建和打包

一、创建项目目录 创建NodeJs项目目录&#xff0c;项目有关的文件、依赖包都将在本目录创建和安装。 mkdir hello_electron & cd hello_electronCMD执行以上命令将在用户目录下创建hello_electron并进入该目录。当然也可以手动在任何地方创建目录&#xff0c;cmd中cd 路径…

【YashanDB知识库】如何dump数据文件,转换rowid, 查询对应内容

本文来自YashanDB官网&#xff0c;具体内容可见https://www.yashandb.com/newsinfo/7459464.html?templateId1718516 问题现象 客户环境有时候会遇到文件损坏的情况&#xff0c;需要dump文件&#xff0c;根据rowid查询数据情况。 问题的风险及影响 熟练掌握崖山数据文件du…

虚拟机、ubantu不能连接网络,解决办法

虚拟机、ubantu不能连接网络&#xff0c;解决办法 物理机OS&#xff1a; [Windows10 专业版](https://so.csdn.net/so/search?qWindows10 专业版&spm1001.2101.3001.7020) 虚拟机平台&#xff1a; VMware Workstation 16 Pro 虚拟机OS&#xff1a; Ubuntu 18.04 自动配…