k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本)

2023-02-16,,,,

k8s kubernetes 核心笔记 镜像仓库 项目k8s改造

2019/10/24 Chenxin

一 基本资料

一 参考:

https://kubernetes.io/ 官网

https://kubernetes.io/docs/home/ 官网文档

<<kerbernetes 权威指南>> <<每天5分钟玩转k8s>> 图书

aws 和 阿里云 的k8s 集群,请参考对应云知识笔记内容.

二 说明:

docker内容请参考<<Docker 基础>>,<Dockerfile 以及 Docker compose>> 笔记

k8s yaml 配置文件请参考对应单独笔记内容.

k8s 文件说明请参考对应独立笔记内容.

二 k8s常用指令

kubectl get all    # 查看所有
kubectl get all --all-namespaces
kubectl get pods|deployments.|replicasets.|service -o wide
kubectl get nodes --show-labels # 查看node标签 kubectl describe pods|deployments.|replicasets.|service xxx_name
kubectl apply -f xxx.yml kubectl delete pods|deployments.|replicasets.|service xxx_name
kubectl delete -f xxx.yml kubectl edit daemonsets. kube-proxy --namespace=kube-system # 编辑内存里配置文件.应该是及时修改后生效,但测试并未生效
kubectl edit service nginx-svc kubectl logs pod_name # 查看pod内进程输出 (查看最后200行 kubectl logs --tail=200 pod_name 或最后1小时 --since=1h )
kubectl api-versions # 查看k8s当前支持的api版本
kubectl run busybox --rm -it --image=busybox /bin/sh # 临时启用一个工具箱
kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword # 临时启动一个mysql客户端
kubectl apply -f httpd.v1.yml --record # 登记到revision,用于回滚
kubectl rollout history deployment httpd # 查看历史记录,为回滚做准备
kubectl rollout undo deployment httpd --to-revision=1 # 回滚到版本1
kubectl exec mypod-id touch /mydata/hello # 到Pod的container里执行指令
kubectl exec mypod-id df | grep data # 到Pod里执行指令
kubectl create configmap game-config --from-file=docs/gameconfig/ # 目录内含有多个配置文件(每个配置文件里可以有很多内容)
journalctl -l -u kubelet # 查看kubelet日志 kubectl get pods -o yaml # 配置yaml格式详情
kubectl get endpoints # 查看终端服务节点 故障排查主要使用
kubectl logs pod_name # 查看控制台输出(pod运行的报错信息)
kubectl describe pods|deployments.|replicasets.|service xxx_name kubectl top node node1 --v=8 #开启debug模式输出.使用top指令查看资源情况,需部署heapster(1.8之前版本默认提供.之后修改为service-metric).参考https://github.com/helm/charts/tree/master/stable/heapster

自动命令补全额外说明

具体请参考本文档"master命令自动补全"部分.如果失效,需要手动再次 source <(kubectl completion bash )

三 架构+安装服务(master+node)

架构说明

1个master,2个node(192.168为二次实验地址)

k8s-master 10.0.0.105 192.168.143.130

k8s-node1 10.0.0.106 192.168.143.131

k8s-node2 10.0.0.107 192.168.143.132

版本说明

首次测试为k8s的1.13版本,第二次测试为1.16.1版本

操作系统版本说明

k8s只支持centos7.x以上版本.

这里采用系统版本为:

AWS Marketplace的CentOS官方镜像而来(更新时间: 19/1/31) 默认为7.6版本(2018/10).

修改/etc/hostname

更新系统

yum update -y # 更新到最新系统版本

更新iptables(略过)

RHEL7.4无需更新iptables,因为iptables -V -> iptables v1.4.21

配置网络桥接与路由转发

/etc/sysctl.conf 文件增加

net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

安装/启动docker

a.配置yum仓库

国内

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

国外

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

ls /etc/yum.repos.d/ -> # docker-ce.repo(新增)

b.正式安装

yum install -y docker-ce

docker --version -> Docker version 18.09.2 (首次版本,第二次为Docker version 19.03.3, build a872fc2f86)

c.启动docker

systemctl start docker.service

systemctl enable docker.service

报错解决

Error: Package: 3:docker-ce-18.09.2-3.el7.x86_64 (docker-ce-stable) Requires: container-selinux >= 2.9

到centos官网寻找最新的container-selinux,然后安装,如下

yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.74-1.el7.noarch.rpm

安装k8s的kubeadm, kubelet 和 kubectl

参考: https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/

国内-阿里云

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=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
EOF

国外-配置google的源地址(也可以采用国内阿里云,中科大镜像)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

将 SELinux 设置为 permissive 模式(镜像默认已经将其禁用)

setenforce 0

sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

master+node安装

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # 会自动安装conntrack-tools cri-tools ebtables socat等依赖包

添加开机自启

systemctl enable docker.service # master+node都需要.

systemctl enable kubelet.service # master+node都需要.mster:先启动kubelet,通过它自启apiserver,controller-manager,scheduler.node:先kubelet后,自动通过kubelet启kube-proxy

到此可以重启一下系统.

四 创建集群

master初始化集群

1.绑定host

[root@master ~]# cat /etc/hostname
master
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.143.130 master
[root@master ~]# hostname
master

2.确保master上的docker已启动

ps axf|grep dockerd

3.(选做)可以将系统镜像里默认开启的rpc暂时关掉,并开机不启动

systemctl stop rpcbind.service rpcbind.socket

systemctl disable rpcbind.service rpcbind.socket

4.master上进行init

[root@ip-10-0-0-105 ~]#
普通执行 kubeadm init --apiserver-advertise-address 10.0.0.105 --pod-network-cidr=10.244.0.0/16
或更改网络段 kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16
或指定k8s版本 kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16 --kubernetes-version=v1.16.1
或指定拉取国内镜像 kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16 --kubernetes-version=v1.16.1 --image-repository=registry.aliyuncs.com/google_containers 失败后的重新初始化(先复位 kubeadm reset)
尝试1.kubeadm init --apiserver-advertise-address 192.168.134.130 --pod-network-cidr=10.10.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
尝试2.kubeadm init --apiserver-advertise-address 0.0.0.0 --pod-network-cidr=10.10.0.0/16 --image-repository=registry.aliyuncs.com/google_containers 提示信息如下(正常执行状态)
[preflight] Running pre-flight checks # kubeadm执行初始化前的检查
[certs] Using certificateDir folder "/etc/kubernetes/pki" # 生成token和证书
[kubeconfig] Using kubeconfig folder "/etc/kubernetes" # 生成kubeconfig文件,kubelet需要这个文件与master通信
[apiclient] All control plane components are healthy after 21.506225 seconds # 安装master组件,会从Google的Registry下载组件的Docker镜像.
[addons] Applied essential addon: CoreDNS # 安装附加组件 kube-proxy和 kube-dns
Your Kubernetes master has initialized successfully! # Kubernetes Master初始化成功 To start using your cluster, you need to run the following as a regular user: # 提示如何配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. # 提示如何安装Pod网络
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of machines by running the following on each node as root: # 提示注册其他的node节点到这个cluster
kubeadm join 10.0.0.105:6443 --token xj0xjp.d6r8fzuecc1ve0bu --discovery-token-ca-cert-hash sha256:cd505e2d2494e429cac81e50942c7c3d4eda50908fddccdb667aefccf0543517

kubeadm join 192.168.143.130:6443 --token cgy56z.02yki9avqnukpxtg \
--discovery-token-ca-cert-hash sha256:152fd4be14843846e48c6752b1bd003bf7fb5e56e22085b31002f6babd58a66f

init报错收集(解决办法)

[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[ERROR Swap]: running with swap on is not supported. Please disable swap

a.需要关闭swap,"swapoff -a".

b.echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables (桥接模式/etc/sysctl.conf里net.bridge.bridge-nf-call-iptables = 1 ;如果系统无bridge-nf-call-iptables文件,则"modprobe br_netfilter"向内核中加载该模块).

c.国内访问,会自动docker pull k8s.gcr.io/xxx 需要翻墙(也可以通过从国内pull后打tag的方式变相处理,具体请百度搜索).

5.执行init失败后采取的恢复方法

a.init执行失败,重新执行init的时候,需要添加 --ignore-preflight-errors=all ,这样会生成多个cluster(后期再删除)

b.执行 kubeadm reset 命令将主机恢复原状(注意,会将下载完的多个docker image也一并删除),然后重新执行 kubeadm init 命令再次进行init安装.

master配置kubectl

根据init初始化中的提示(root执行会有一些问题)这里创建一个centos用户来执行.

useradd centos

visudo里添加 centos ALL=(ALL) NOPASSWD: ALL # 涉及拷贝root权限的文件

拷贝配置文件

su - centos;

cd ~; mkdir .kube; sudo cp -i /etc/kubernetes/admin.conf .kube/config; sudo chown $(id -u)

k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本)的相关教程结束。

《k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本).doc》

下载本文的Word格式文档,以方便收藏与打印。