K8S 极速入门

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: K8S 极速入门

主机安全配置(所有节点)

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

确认是否运行

firewall-cmd --state

SELINUX配置

做出下述修改,一定要重启系统才能生效

sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

主机时间同步(所有节点)

yum -y install ntpdate
crontab -l 0 */1 * * * ntpdate time1.aliyun.com

永久关闭swap分区(所有节点)

使用kubeadm部署必须关闭swap分区,修改配置文件后

需要重启操作系统。

vi /etc/fstab

在swap文件系统对应的行,行首添加#表示注释。

添加网桥过滤(所有节点)

cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

加载br_netfilter模块

modprobe br_netfilter

查看是否加载

lsmod | grep br_netfilter

加载网桥过滤配置文件

sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

开启ipvs(所有节点)

安装ipset及ipvsadm

yum -y install ipset ipvsadm

在所有节点执行如下脚本

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

授权、运行、检查是否加载

chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules
lsmod | grep ip_vs_rr

安装docker-ce(所有节点)

所有节点安装wget和vim命令

yum -y install wget vim

YUM源设置

首先去到 /etc/yum.repos.d/ 目录,删除该目录下所有repo文件

下载centos基础yum源配置(这里用的是阿里云的镜像)

curl -o CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

下载docker的yum源配置

curl -o docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

配置kubernetes的yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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

执行下列命令刷新yum源缓存

yum clean all  
 yum makecache  
 yum repolist

出现下面列表表示yum源配置正确

安装docker

查看可安装的docker-ce版本

yum list docker-ce.x86_64 --showduplicates | sort -r

如果上面这步显示不出来可用的版本,rm -rf /etc/yum.repos.d/docker-ce.repo 删除这个yum源,重新获取,再来一遍

安装指定版本docker-ce

此版本不需要修改服务启动文件及iptables默认规则链策略。

yum -y install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7
yum -y install containerd.io

查看docker-ce是否安装成功

docker version

设置开机自启动和启动docker

systemctl enable docker
systemctl start docker

修改docker-ce服务配置文件(所有节点)

修改其目的是为了后续使用/etc/docker/daemon.json来

进行更多配置

vim /usr/lib/systemd/system/docker.service

新建daemon.json文件

vim /etc/docker/daemon.json

插入下面内容

{
  "exec-opts":["native.cgroupdriver=systemd"]
}

重启docker

systemctl restart docker
systemctl restart containerd

查看是否启动成功

systemctl status docker
systemctl status containerd

安装k8s(所有节点)

yum list | grep kubeadm

输入y 回车

如果你上面是单台安装的,只需要将这个yum源scp到worker1和2

scp /etc/yum.repos.d/kubernetes.repo worker1:/etc/yum.repos.d/

这里要输入yes和worker1和2的密码

复制到过去后,需要同样的做验证

yum list | grep kubeadm

输入y 回车

生成 containerd 的默认配置文件

containerd config default > /etc/containerd/config.toml

查看 sandbox 的默认镜像仓库在文件中的第几行

cat /etc/containerd/config.toml | grep -n "sandbox_image"

使用 vim 编辑器 定位到 sandbox_image,将 仓库地址修改成 k8simage/pause:3.6

vim /etc/containerd/config.toml

sandbox_image = " registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"

重启 containerd 服务

systemctl daemon-reload
systemctl restart containerd.service

安装kubeadm kubelet kubectl

yum -y install --setopt=obsoletes=0 kubeadm-1.17.2-0 kubelet-1.17.2-0 kubectl-1.17.2-0

为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。

vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

systemctl enable kubelet
systemctl status kubelet

k8s集群容器镜像准备(master)

查看集群使用的容器镜像

kubeadm config images list

将列表中的文件导入到image.list文件,便于制作脚本

kubeadm config images list >> image.list
vim image.list
#!/bin/bash
img_list='registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.17.2
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.17.2
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.17.2
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.17.2
registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.9-0
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.10.1'
for img in ${img_list}
do
        docker pull $img
done

sh images.list
docker images

scp传输pause和kube-proxy两个镜像到worker节点

docker save -o kube-proxy.tar registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy
docker save -o pause.tar registry.cn-hangzhou.aliyuncs.com/google_containers/pause

scp kube-proxy.tar pause.tar worker1:/root
scp kube-proxy.tar pause.tar worker2:/root

在worker节点 load 镜像

docker load -i kube-proxy.tar
docker load -i pause.tar

初始化k8s集群

在master节点执行,10.244.0.0/16是固定的,192.168.150.100是master节点ip

kubeadm init --kubernetes-version=v1.17.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.150.100 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

如果报下面这些错

请执行下面2条命令后,再执行一次上面kubeadm init …

rm -rf /etc/kubernetes/
swapoff -a && kubeadm reset  && systemctl daemon-reload && systemctl restart kubelet  && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

看到下面面板就表示k8s初始化成功

初始化成功,注意:把初始化的日志复制粘贴保存,后面有用!

使用集群

master节点

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

所有节点上传calico-39文件夹,导入对应的镜像

master节点修改calico.yml

vim calico.yml
:set nu  // 显示行号
:607  //跳到607行

在看622行这个地址,要跟kubeadm init 的时候–pod-network-cidr=10.244.0.0/16 保持一致

改完 :wq 保存退出

kubectl apply -f calico.yml

到两个worker节点,分别执行初始化日志中最后的kubeadm join …

kubeadm join 192.168.150.100:6443 --token 0cestx.f8qj3deigs45kdhu \
    --discovery-token-ca-cert-hash sha256:804d4ad486083b6a73fbe24db673dda14feea91b40ef15137ff3329c210535da

验证k8s集群可用性(master节点)

查看节点集群所有节点

kubectl get nodes

查看集群健康状态

kubectl get cs

查看集群信息

kubectl cluster-info

查看pods运行情况

kubectl get pods --namespace kube-system

kubectl使用

kubectl帮助方法

检查kubectl是否安装

rpm -qa | grep kubectl

获取kubectl帮助方法

kubectl --help

kubectl子命令使用分类

在worker节点如何使用kubectl命令管理k8s集群?

在worker节点执行

mkdir .kube
scp master1:/root/.kube/config .kube/

使用命令验证

kubectl get nodes

NameSpace

查看NameSpace

kubectl get namespace

说明

default 用户创建的pod默认在此命名空间

kube-public 所有用户均可以访问,包括未认证用户

kube-node-lease kubernetes集群节点租约状态v1.13加入

kube-system kubernetes集群在使用

创建NameSpace

kubectl create namespace test

删除NameSpace

删除命名空间时,命名空间中包含的所有资源对象同时被删除。

kubectl delete namespace test

Pod

Pod是kubernetes集群能够调度的最小单元

查看pod

查看default命名空间中的Pod

kubectl get pod
# 或者
kubectl get pods
# 或者
kubectl get pod --namespace default
# 或者
kubectl get pods --namespace default

查看kube-system命名空间中的Pod

kubectl get pod -n kube-system

创建Pod

编写用于创建Pod资源清单文件

vim 02-create-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: ngninx-pod
    image: nginx:latest
    ports:
    - name: nginxport
      containerPort: 80

应用用于创建Pod资源清单文件

kubectl apply -f 02-create-pod.yaml

查看pod更加详细信息

kubectl get pods -o wide

删除Pod

kubectl命令行删除

kubectl delete pods pod1

通过kubectl使用Pod资源清单文件删除

kubectl delete -f 02-create-pod.yaml

Controller(控制器)

创建Deployment控制器类型应用

通过kubectl命令行创建

kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2

说明

nginx-app 是deployment控制器类型的应用名称

nginx:latest 是应用运行的Pod中的Container所使用的镜像

IfNotPresent 是Container容器镜像下载策略,如果本地有镜像,使用本地,如果本地没有镜像,下载镜像

–replicas=2 是指应用运行的Pod共计2个副本,这是用户的期望值,Deployment控制器中的ReplicaSet控制器会

一直监控此应用运行的Pod副本状态,如果数量达不到用户期望,就会重新拉起一个新的Pod,会让Pod数量一直维持在用户期望值数量。

查看Deployment控制器类型应用

kubectl get deployment.apps

删除Deployment控制器类型应用

先查看

kubectl get deployment.apps

再删除

kubectl delete deployment.apps nginx-app

Service

介绍&作用

Service 不是实体服务,是一条iptables或ipvs的转发规则,通过Service为pod客户端提供访问pod方法,即客户端访问pod入口

Service通过Pod标签与Pod进行关联

Service类型

ClusterIP:默认,分配一个集群内部可以访问的虚拟IP

NodePort:在每个Node上分配一个端口作为外部访问入口

LoadBalancer:工作在特定的Cloud Provider上,例如Google,Cloud,AWS,OpenStack

ExternalName:表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信

Service创建

创建Deployment类型应用

kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=1

验证Deployment类型应用创建情况

kubectl get deployment.apps

创建Service与Deployment类型应用关联

kubectl expose deployment.apps nginx-app --type=ClusterIP --target-port=80 --port=80

说明

expose 创建service

deployment.apps 控制器类型

nginx-app 应用名称,也是service名称

–type=ClusterIP 指定service类型

–target-port=80 指定Pod中容器端口

–port=80 指定service端口

访问Service以实现访问Pod目的

kubectl get service

删除Service

查看service

kubectl get service

删除service

kubectl delete service nginx-app

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
78 5
|
9天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
30 3
|
13天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
22 3
|
11天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!
|
1月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!
|
1月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
1月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes的奇妙之旅
【9月更文挑战第34天】在数字化浪潮中,云原生技术如Kubernetes已经成为IT行业的重要力量。本文旨在通过浅显易懂的方式,向初学者揭示Kubernetes的核心概念、架构设计及其在实际业务中的应用价值,帮助读者快速理解并掌握这一技术,为进一步深入学习和实践打下坚实基础。
51 1
|
2月前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
60 11
|
2月前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
1月前
|
运维 Kubernetes Cloud Native
云原生时代的容器编排:Kubernetes入门与实践
【10月更文挑战第4天】在云计算的浪潮中,云原生技术以其敏捷、可扩展和高效的特点引领着软件开发的新趋势。作为云原生生态中的关键组件,Kubernetes(通常被称为K8s)已成为容器编排的事实标准。本文将深入浅出地介绍Kubernetes的基本概念,并通过实际案例引导读者理解如何利用Kubernetes进行高效的容器管理和服务部署。无论你是初学者还是有一定经验的开发者,本文都将为你打开云原生世界的大门,并助你一臂之力在云原生时代乘风破浪。