GVKun编程网logo

制作 Swift 和 Objective-C Mixed 的 Pod(swift制作app)

1

本文将分享制作Swift和Objective-CMixed的Pod的详细内容,并且还将对swift制作app进行详尽解释,此外,我们还将为大家带来关于.NETCorepod无法连接到Kubernete

本文将分享制作 Swift 和 Objective-C Mixed 的 Pod的详细内容,并且还将对swift制作app进行详尽解释,此外,我们还将为大家带来关于.NET Core pod 无法连接到 Kubernetes 中的 SQL Server pod、023. 掌握 Pod-Pod 扩容和缩容、CocoaPods pod install/ pod update( 安装/更新代码库)超级慢问题、CocoaPods pod install/pod update更新慢的问题的相关知识,希望对你有所帮助。

本文目录一览:

制作 Swift 和 Objective-C Mixed 的 Pod(swift制作app)

制作 Swift 和 Objective-C Mixed 的 Pod(swift制作app)

(点击上方公众号,可快速关注)

来源:南栀倾寒   

www.jianshu.com/p/c7623c31d77b

如有好文章投稿,请点击 → 这里了解详情


知识背景


  1. What is CocoaPods(https://guides.cocoapods.org/using/getting-started.html)

  2. What did CocoaPods do?(https://guides.cocoapods.org/using/using-cocoapods.html)


In Xcode,with references directly from the ruby source,it:

  1. Creates or updates a workspace.

  2. Adds your project to the workspace if needed.

  3. Adds the CocoaPods static library project to the workspace if needed.

  4. Adds libPods.a to: targets => build phases => link with libraries.

  5. Adds the CocoaPods Xcode configuration file to your app’s project.

  6. Changes your app’s target configurations to be based on CocoaPods’s.

  7. Adds a build phase to copy resources from any pods you installed to your app bundle. i.e. a ‘Script build phase’ after all other build phases with the following:

  • Shell: /bin/sh

  • Script: ${SRCROOT}/Pods/PodsResources.sh

大意是,CocoaPods是一个依赖管理工具,使用CocoaPods可以自动的去分析依赖,然后通过脚本去将第三方依赖复制编译为静态库然后链接进项目。~~~等。


  • 制作Pod


有时候我们有把代码做成一个轮子给别人用情况,我们需要按照官方的教程Making CocoaPods去制作。

教程分为2类 :

  1. 发布公共Pod给所有开发者使用。

  2. 制作私有Pod。 方法较为简单。自行查阅资料即可。这里不再赘述。

  • Swift和Objective-C Mixed


参考官方的文档(文末指出),混编里面包含有2种调用情况:

Question1. Swift调用Objective-C
Question2. Objective-C调用Swift


这里我新建一个项目 命名为Mixed(Single View Application), 创建一个文件夹Classes用于存放源代码

创建一个Objective-C Class O 继承自NSObject 创建一个Swift Class S 继承自NSObject


  • Answer1: 为Swift源代码添加一个 XXX.h头文件这里为Mixed-Bridging-Header 在这个文件中导入需要访问的Objective-C 源代码的头文件。



headerConfig


有时候Xcode反应会稍微延迟一点。手动编译一下即可。做完这个配置,Swift即可访问Objective-C 源代码。

代码如图:



swiftAccessObjc


  • Answer2: Objective-C 访问Swift源代码 需要导入系统为项目生成的头文件,默认为Module+Swift.h 当然自己也是可以修改的, 导入之后,编译一下(Xcode有时候有缓存,没事就应该编译一下

总结

以上是小编为你收集整理的制作 Swift 和 Objective-C Mixed 的 Pod全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

.NET Core pod 无法连接到 Kubernetes 中的 SQL Server pod

.NET Core pod 无法连接到 Kubernetes 中的 SQL Server pod

如何解决.NET Core pod 无法连接到 Kubernetes 中的 SQL Server pod

我有一个 .NET Core pod,需要访问 Kubernetes(docker-desktop)中的 sql Server pod。 使用端口转发,我可以从 sql Server Management Studio 连接到该 sql Server。但是当我尝试从 .NET Core pod 连接时,它说

未找到或无法访问服务器

这是日志中的错误

  1. [04:28:38 Error] Microsoft.EntityFrameworkCore.Database.Connection
  2. An error occurred using the connection to database ''MyTestDatabase'' on server ''tcp:sqlserver-service,1433''.
  3. [04:28:38 Error] Microsoft.EntityFrameworkCore.Query
  4. An exception occurred while iterating over the results of a query for context type ''Web.Data.ApplicationDbContext''.
  5. Microsoft.Data.sqlClient.sqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to sql Server. The server was not found or was not accessible. Verify that the instance name is correct and that sql Server is configured to allow remote connections. (provider: TCP Provider,error: 40 - Could not open a connection to sql Server)

我在容器中的连接字符串

  1. Server=tcp:sqlserver-service,1433;User ID=sa;Password=myPass12;Initial Catalog=MyTestDatabase;MultipleActiveResultSets=true;Connection Timeout=30;

sql Server 部署 yml 文件

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. Metadata:
  4. name: sqldata
  5. spec:
  6. capacity:
  7. storage: 2Gi
  8. accessModes:
  9. - ReadWriteMany
  10. hostPath:
  11. path: "/sqldata"
  12. ---
  13. apiVersion: v1
  14. kind: PersistentVolumeClaim
  15. Metadata:
  16. name: dbclaim
  17. spec:
  18. accessModes:
  19. - ReadWriteMany
  20. resources:
  21. requests:
  22. storage: 2Gi
  23. ---
  24. apiVersion: apps/v1
  25. kind: Deployment
  26. Metadata:
  27. name: sqlserver
  28. spec:
  29. replicas: 1
  30. selector:
  31. matchLabels:
  32. app: sqlserver
  33. template:
  34. Metadata:
  35. labels:
  36. app: sqlserver
  37. spec:
  38. volumes:
  39. - name: sqldata-storage
  40. persistentVolumeClaim:
  41. claimName: dbclaim
  42. terminationGracePeriodSeconds: 10
  43. initContainers:
  44. - name: volume-permissions
  45. image: busyBox
  46. command: ["sh","-c","chown -R 10001:0 /var/opt/mssql"]
  47. volumeMounts:
  48. - mountPath: "/var/opt/mssql"
  49. name: sqldata-storage
  50. containers:
  51. - name: sqlserver1
  52. image: mcr.microsoft.com/mssql/server
  53. ports:
  54. - containerPort: 1433
  55. env:
  56. - name: MSsql_PID
  57. value: "Developer"
  58. - name: SA_PASSWORD
  59. value: "myPass12"
  60. - name: ACCEPT_EULA
  61. value: "Y"
  62. volumeMounts:
  63. - mountPath: "/var/opt/mssql/data"
  64. name: sqldata-storage
  65. ---
  66. apiVersion: v1
  67. kind: Service
  68. Metadata:
  69. name: sqlserver-service
  70. spec:
  71. ports:
  72. - name: sqlserver
  73. port: 1433
  74. targetPort: 1433
  75. protocol: TCP
  76. selector:
  77. name: sqlserver
  78. type: LoadBalancer

从 sql Server Management Studio 连接

enter image description here

我肯定错过了什么。

提前致谢

解决方法

这是我的错。实际上服务的选择器是错误的。

  1. selector:
  2. name: sqlserver

应该是

  1. selector:
  2. app: sqlserver

谢谢大家

023. 掌握 Pod-Pod 扩容和缩容

023. 掌握 Pod-Pod 扩容和缩容

一 Pod 的扩容和缩容

Kubernetes 对 Pod 的扩缩容操作提供了手动和自动两种模式,手动模式通过执行 kubectl scale 命令或通过 RESTful API 对一个 Deployment/RC 进行 Pod 副本数量的设置。自动模式则需要用户根据某个性能指标或者自定义业务指标,并指定 Pod 副本数量的范围,系统将自动在这个范围内根据性能指标的变化进行调整。

1.1 手动缩容和扩容

  1 [root@uk8s-m-01 study]# vi nginx-deployment.yaml
  2 apiVersion: apps/v1beta1
  3 kind: Deployment
  4 metadata:
  5   name: nginx-deployment
  6 spec:
  7   replicas: 3
  8   template:
  9     metadata:
 10       labels:
 11         app: nginx
 12     spec:
 13       containers:
 14       - name: nginx
 15         image: nginx:1.7.9
 16         ports:
 17         - containerPort: 80
  1 [root@uk8s-m-01 study]# kubectl create -f nginx-deployment.yaml
  2 [root@uk8s-m-01 study]# kubectl scale deployment nginx-deployment --replicas=5	#扩容至5个
  3 [root@uk8s-m-01 study]# kubectl get pods	                                	#查看扩容后的Pod
clipboard
  1 [root@uk8s-m-01 study]# kubectl scale deployment nginx-deployment --replicas=2	#缩容至2个
  2 [root@uk8s-m-01 study]# kubectl get pods
clipboard

1.2 自动扩容机制

Kubernetes 使用 Horizontal Pod Autoscaler(HPA)的控制器实现基于 CPU 使用率进行自动 Pod 扩缩容的功能。HPA 控制器基于 Master 的 kube-controller-manager 服务启动参数 --horizontal-pod-autoscaler-sync-period 定义的探测周期(默认值为 15s),周期性地监测目标 Pod 的资源性能指标,并与 HPA 资源对象中的扩缩容条件进行对比,在满足条件时对 Pod 副本数量进行调整。
  • HPA 原理
Kubernetes 中的某个 Metrics Server(Heapster 或自定义 MetricsServer)持续采集所有 Pod 副本的指标数据。HPA 控制器通过 Metrics Server 的 API(Heapster 的 API 或聚合 API)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标 Pod 副本数量。
当目标 Pod 副本数量与当前副本数量不同时,HPA 控制器就向 Pod 的副本控制器(Deployment、RC 或 ReplicaSet)发起 scale 操作,调整 Pod 的副本数量,完成扩缩容操作。
clipboard
  • HPA 指标类型
Master 的 kube-controller-manager 服务持续监测目标 Pod 的某种性能指标,以计算是否需要调整副本数量。目前 Kubernetes 支持的指标类型如下:
Pod 资源使用率:Pod 级别的性能指标,通常是一个比率值,例如 CPU 使用率。
Pod 自定义指标:Pod 级别的性能指标,通常是一个数值,例如接收的请求数量。
Object 自定义指标或外部自定义指标:通常是一个数值,需要容器应用以某种方式提供,例如通过 HTTP URL“/metrics” 提供,或者使用外部服务提供的指标采集 URL。
Metrics Server 将采集到的 Pod 性能指标数据通过聚合 API(Aggregated API) 如 metrics.k8s.io、 custom.metrics.k8s.io 和 external.metrics.k8s.io 提供给 HPA 控制器进行查询。
  • 扩缩容算法
Autoscaler 控制器从聚合 API 获取到 Pod 性能指标数据之后,基于下面的算法计算出目标 Pod 副本数量,与当前运行的 Pod 副本数量进行对比,决定是否需要进行扩缩容操作:
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
即当前副本数 x(当前指标值 / 期望的指标值),将结果向上取整。
释义:以 CPU 请求数量为例,如果用户设置的期望指标值为 100m,当前实际使用的指标值为 200m,则计算得到期望的 Pod 副本数量应为两个(200/100=2)。如果设置的期望指标值为 50m,计算结果为 0.5,则向上取整值为 1, 得到目标 Pod 副本数量应为 1 个。
注意:当计算结果与 1 非常接近时,可以设置一个容忍度让系统不做扩缩容操作。容忍度通过 kube-controller-manager 服务的启动参数 --horizontalpod-autoscaler-tolerance 进行设置,默认值为 0.1(即 10%),表示基于上述算法得到的结果在 [-10%-+10%] 区间内,即 [0.9-1.1],控制器都不会进行扩缩容操作
也可以将期望指标值(desiredMetricValue)设置为指标的平均值类型,例如 targetAverageValue 或 targetAverageUtilization,此时当前指标值(currentMetricValue) 的算法为所有 Pod 副本当前指标值的总和除以 Pod 副本数量得到的平均值。
此外,存在几种 Pod 异常的如下情况:
  • Pod 正在被删除(设置了删除时间戳):将不会计入目标 Pod 副本数量。
  • Pod 的当前指标值无法获得:本次探测不会将这个 Pod 纳入目标 Pod 副本数量,后续的探测会被重新纳入计算范围。
  • 如果指标类型是 CPU 使用率,则对于正在启动但是还未达到 Ready 状态的 Pod,也暂时不会纳入目标副本数量范围。
提示:可以通过 kubecontroller-manager 服务的启动参数 --horizontal-pod-autoscaler-initialreadiness-delay 设置首次探测 Pod 是否 Ready 的延时时间,默认值为 30s。
另一个启动参数 --horizontal-pod-autoscaler-cpuinitialization-period 设置首次采集 Pod 的 CPU 使用率的延时时间。
当存在缺失指标的 Pod 时,系统将更保守地重新计算平均值。系统会假设这些 Pod 在需要缩容(Scale Down) 时消耗了期望指标值的 100%,在需要扩容(Scale Up)时消耗了期望指标值的 0%,这样可以抑制潜在的扩缩容操作。
此外,如果存在未达到 Ready 状态的 Pod,并且系统原本会在不考虑缺失指标或 NotReady 的 Pod 情况下进行扩展,则系统仍然会保守地假设这些 Pod 消耗期望指标值的 0%,从而进一步抑制扩容操作。如果在 HorizontalPodAutoscaler 中设置了多个指标,系统就会对每个指标都执行上面的算法,在全部结果中以期望副本数的最大值为最终结果。如果这些指标中的任意一个都无法转换为期望的副本数(例如无法获取指标的值),系统就会跳过扩缩容操作。
最后, 在 HPA 控制器执行扩缩容操作之前,系统会记录扩缩容建议信息(Scale Recommendation)。控制器会在操作时间窗口(时间范围可以配置)中考虑所有的建议信息,并从中选择得分最高的建议。这个值可通过 kube-controller-manager 服务的启动参数 --horizontal-podautoscaler-downscale-stabilization-window 进行配置,默认值为 5min。这个配置可以让系统更为平滑地进行缩容操作,从而消除短时间内指标值快速波动产生的影响。

1.3 HorizontalPodAutoscaler

Kubernetes 将 HorizontalPodAutoscaler 资源对象提供给用户来定义扩缩容的规则。
HorizontalPodAutoscaler 资源对象处于 Kubernetes 的 API 组 “autoscaling” 中, 目前包括 v1 和 v2 两个版本。 其中 autoscaling/v1 仅支持基于 CPU 使用率的自动扩缩容, autoscaling/v2 则用于支持基于任意指标的自动扩缩容配置, 包括基于资源使用率、 Pod 指标、 其他指标等类型的指标数据。
示例 1:基于 autoscaling/v1 版本的 HorizontalPodAutoscaler 配置,仅可以设置 CPU 使用率。
  1 [root@uk8s-m-01 study]# vi php-apache-autoscaling-v1.yaml
  2 apiVersion: autoscaling/v1
  3 kind: HorizontalPodAutoscaler
  4 metadata:
  5   name: php-apache
  6 spec:
  7   scaleTargetRef:
  8     apiVersion: apps/v1
  9     kind: Deployment
 10     name: php-apache
 11   minReplicas: 1
 12   maxReplicas: 10
 13   targetCPUUtilizationPercentage: 50
释义:
scaleTargetRef:目标作用对象,可以是 Deployment、ReplicationController 或 ReplicaSet。
targetCPUUtilizationPercentage:期望每个 Pod 的 CPU 使用率都为 50%,该使用率基于 Pod 设置的 CPU Request 值进行计算,例如该值为 200m,那么系统将维持 Pod 的实际 CPU 使用值为 100m。
minReplicas 和 maxReplicas:Pod 副本数量的最小值和最大值,系统将在这个范围内进行自动扩缩容操作, 并维持每个 Pod 的 CPU 使用率为 50%。
为了使用 autoscaling/v1 版本的 HorizontalPodAutoscaler,需要预先安装 Heapster 组件或 Metrics Server,用于采集 Pod 的 CPU 使用率。
示例 2:基于 autoscaling/v2beta2 的 HorizontalPodAutoscaler 配置。
  1 [root@uk8s-m-01 study]# vi php-apache-autoscaling-v2.yaml
  2 apiVersion: autoscaling/v2beta2
  3 kind: HorizontalPodAutoscaler
  4 metadata:
  5   name: php-apache
  6 spec:
  7   scaleTargetRef:
  8     apiVersion: apps/v1
  9     kind: Deployment
 10     name: php-apache
 11   minReplicas: 1
 12   maxReplicas: 10
 13   metrics:
 14   - type: Resource
 15     resource:
 16       name: cpu
 17       target:
 18         type: Utilization
 19         averageUtilization: 50
释义:
scaleTargetRef:目标作用对象,可以是 Deployment、ReplicationController 或 ReplicaSet。
minReplicas 和 maxReplicas:Pod 副本数量的最小值和最大值,系统将在这个范围内进行自动扩缩容操作, 并维持每个 Pod 的 CPU 使用率为 50%。
metrics:目标指标值。在 metrics 中通过参数 type 定义指标的类型;通过参数 target 定义相应的指标目标值,系统将在指标数据达到目标值时(考虑容忍度的区间)触发扩缩容操作。
  • metrics 中的 type(指标类型)设置为以下几种:
    • Resource:基于资源的指标值,可以设置的资源为 CPU 和内存。
    • Pods:基于 Pod 的指标,系统将对全部 Pod 副本的指标值进行平均值计算。
    • Object:基于某种资源对象(如 Ingress)的指标或应用系统的任意自定义指标。
Resource 类型的指标可以设置 CPU 和内存。对于 CPU 使用率,在 target 参数中设置 averageUtilization 定义目标平均 CPU 使用率。对于内存资源,在 target 参数中设置 AverageValue 定义目标平均内存使用值。指标数据可以通过 API“metrics.k8s.io” 进行查询,要求预先启动 Metrics Server 服务。
Pods 类型和 Object 类型都属于自定义指标类型,指标的数据通常需要搭建自定义 Metrics Server 和监控工具进行采集和处理。指标数据可以通过 API“custom.metrics.k8s.io” 进行查询,要求预先启动自定义 Metrics Server 服务。
类型为 Pods 的指标数据来源于 Pod 对象本身, 其 target 指标类型只能使用 AverageValue,示例:
  1  metrics:
  2   - type: Pods
  3     pods:
  4       metrics:
  5         name: packets-per-second
  6       target:
  7         type: AverageValue
  8         averageValue: 1k

CocoaPods pod install/ pod update( 安装/更新代码库)超级慢问题

CocoaPods pod install/ pod update( 安装/更新代码库)超级慢问题

最近使用CocoaPods来添加/删除第三方类库时,无论是执行pod install还是pod update都无限卡住了。原因在于当执行以上两个命令的时候会升级CocoaPods的spec仓库,因此解决此问题的办法就是忽略这个监测升级CocoaPods的仓库的步骤,那么怎么来忽略这个步骤来提升安装或更新步骤呢,

只需要在命令中加个参数即可,命令如下:

$ pod install --verbose --no-repo-update

$ pod update --verbose --no-repo-update

或者

$ pod install --no-repo-update

pod update --no-repo-update


解决办法 : $ pod repo update 
原因:你本地的repo库太长时间没有更新了


题外:gem版本过老

gem是管理Ruby库和程序的标准包,如果它的版本过低也可能导致安装失败,解决方案自然是升级gem,执行下述命令即可:

$ sudo gem update --system


CocoaPods pod install/pod update更新慢的问题

CocoaPods pod install/pod update更新慢的问题

最近使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动

原因在于当执行以上两个命令的时候会升级CocoaPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少。加参数的命令如下:

pod install --verbose --no-repo-update

pod update --verbose --no-repo-update

关于制作 Swift 和 Objective-C Mixed 的 Podswift制作app的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于.NET Core pod 无法连接到 Kubernetes 中的 SQL Server pod、023. 掌握 Pod-Pod 扩容和缩容、CocoaPods pod install/ pod update( 安装/更新代码库)超级慢问题、CocoaPods pod install/pod update更新慢的问题的相关知识,请在本站寻找。

本文标签: